Leetcode 402. 移掉K位数字

// 贪心算法,当前遇到的数,比栈顶的元素小,就将栈顶元素给弹出,直至遇到比栈顶大或者是栈为空才停止,字符串保证是一个正常的数字序列。class Solution {
public:
    string removeKdigits(string num, int k) {
        std::vector<int> S;//为了遍历,因此可以用vector来进行模拟。
        std::string result = "";// 保存最后的结果
        for(int i=0; i<num.size(); ++i) //开始遍历整个string
        {
            int number = num[i] - ‘0‘;// 算出当前的值
            while(S.size()>0 && number<S[S.size()-1] &&  k>0)// 开始进行贪心判断
            {
                S.pop_back();
                --k;
            }// 否则,如果number是0 并且S中有元素照样可以放置进去
            if(number!=0 || S.size()!=0)
            {
                S.push_back(number);
            }
        }//已经遍历完了所有的字符序列 这个时候如果k>0 仍需要进行弹出,这个时候,栈中的元素就是按照升序进行存储的了。
        while(S.size()!=0 && k>0)
        {
            S.pop_back();
            --k;
        }
        for(int i=0; i<S.size(); ++i)
        {
            result.append(1, ‘0‘+S[i]);
        }

        if(result == "")
            result = "0";

        return result;
    }
};

原文地址:https://www.cnblogs.com/randyniu/p/9334144.html

时间: 2024-08-30 09:40:54

Leetcode 402. 移掉K位数字的相关文章

【LeetCode】402、移除K位数字

1.移除K位数字 题目:402. 移掉K位数字 题目描述: ??给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小.(num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零.) 示例 : 输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219. 输入: num = "10200", k = 1 输

算法46----移除K位数字

一.题目:移除K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219. 示例 2 : 输入: num = "10200", k = 1 输出: "

贪心算法-移除K个数字

1.题目描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 2.题目分析: 题目简介明了,就是把给定的数字删除指定个数的数字使删除之后的数字是同等位数数字中最小的那个.但是需要注意的是,题目中给的数字是字符串的形式并且输出结果也是字符串的形式,这就涉及到字符串和数字之间的相互转化问题. 题目中要求删除的数字个数是不确定的,那么我们可以根据数学知识先分析当我们删除一个数字

[LeetCode] Remove K Digits 去掉K位数字

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible. Note: The length of num is less than 10002 and will be ≥ k. The given num does not contain any leading zero. Ex

(笔试题)删除K位数字

题目: 现有一个 n 位数,你需要删除其中的 k 位,请问如何删除才能使得剩下的数最大? 比如当数为 2319274, k=1 时,删去 2 变成 319274 后是可能的最大值. 思路: 1.贪心算法 每次从高位向低位数,删除高位数字比低位数字小的那位数字.如2319274 第一次2<3,删除2,得到319274 第二次3>1,略过,1<9,删除1,得到39274 第三次3<9,删除3,得到9274 ...... // greedy method string deleteKBi

[小米OJ] 9. 移除 K 位得到最小值

思路: 重复k次: 1.找到并且删除第一个 num[i] > num[i+1] 的第i位数字. 2.若删除过程中,序列变成递增序列,则直接删除最后一位. 注意除去字符串头的0 def solution(line): num, k = line.split(" ") for j in range(0, int(k)): flag = True for i in range(0, len(num)-1): if num[i] > num[i+1]: flag = False n

rqnoj 相同的后k位

题目描述 路人甲给你出了一道奇怪的问题,他给你了一个正整数L,他想知道当正整数m,n为何值时,L^m与L^n的最后K位数字相同. 路人甲考虑到可能会有很多组解,你只需要告诉他最小的m,n且0<n<m. 输入格式 一个正整数L,一个正整数k 输出格式 输出一个最小的m,n 样例输入 样例输出 注释 [数据规模及约定] 100<=L<=9999 1<=k<=4 #include<iostream> #include<cstdio> #include&

leetcode [402]Remove K Digits

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible. Note: The length of num is less than 10002 and will be ≥ k. The given num does not contain any leading zero. Ex

图解双指针 | LeetCode 27. 移除元素

题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素. 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 的前两个元素均为 2. 你不需要考虑数组中超出新长度后面的元素