leetcode-402 移掉K位数组
生活随笔
收集整理的這篇文章主要介紹了
leetcode-402 移掉K位数组
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一個(gè)以字符串表示的非負(fù)整數(shù) num,移除這個(gè)數(shù)中的 k 位數(shù)字,使得剩下的數(shù)字最小。
注意:
num 的長(zhǎng)度小于 10002 且 ≥ k。
num 不會(huì)包含任何前導(dǎo)零。
示例 1 :
輸入: num = “1432219”, k = 3
輸出: “1219”
解釋: 移除掉三個(gè)數(shù)字 4, 3, 和 2形成一個(gè)新的最小的數(shù)字 1219。
針對(duì)該問(wèn)題,顯然很好的解決辦法便是貪心
從高位開(kāi)始遍歷整數(shù),即在移除的數(shù)字在k的范圍內(nèi),盡可能選擇移除較小的數(shù)值
實(shí)現(xiàn)上使用棧的形態(tài)進(jìn)行管理,棧保存最終的移除后的結(jié)果,并且動(dòng)態(tài)變化;當(dāng)出現(xiàn)元素小于棧頂元素的情況下將棧頂元素移除,在棧不為空或者 元素不等于零時(shí) 將該元素放入棧中。
實(shí)現(xiàn)如下:
string removeKdigits(string num, int k) {vector<int> S;string result = "";for (int i = 0;i < num.length(); ++i) {int number = num[i] - '0';while(S.size() != 0 && S[S.size() - 1] > number && k) {S.pop_back();k--;}if (number != 0 || S.size()) {//處理前導(dǎo)零的情況S.push_back(number);}}while(S.size() && k) {S.pop_back();k--;}for (int i = 0;i < S.size(); ++i) {result.append(1,'0' + S[i]);}if (result == "") {return "0";}return result;
}
總結(jié)
以上是生活随笔為你收集整理的leetcode-402 移掉K位数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 当你一人在外最委屈时候想做什么?
- 下一篇: leetcode-55 跳跃游戏