Remove K Digits

1.題目描述(難度Medium)

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.
Example 1:

Input: num = "1432219", k = 3
Output: "1219"
Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.
Example 2:

Input: num = "10200", k = 1
Output: "200"
Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.
Example 3:

Input: num = "10", k = 2
Output: "0"
Explanation: Remove all the digits from the number and it is left with nothing which is 0.

2.題目分析

題目要求是在給定的數(shù)字字符串中邀层,刪掉k個字符,使剩下的字符串的數(shù)最小。其中字符串的原始順序是不變的兔综,分析如何從前往后刪除字符是我們求解的關(guān)鍵不皆。這題反向思維可能更便于處理所有字符首装。
解題思路1:
刪掉k個字符婿着,意味著查吊,
最小的第一個字符师抄,是在0:N-k+1中選,其索引為index0漓柑,k=k-1
最小的第二個字符,是在index0+1:N-k+1中選叨吮,其索引為index1辆布,k=k-1
...
如此,直到k=0.我們把剩下的字符串追加即可茶鉴。
這種思路也可以倒過來锋玲,我們要留N-k個字符。即令k=N-k
思路同上涵叮,只是當(dāng)k=0時惭蹂,我們就得到我們需要的字符,不需要額外追加了割粮。

解題思路2:
我們可以從前往后遍歷數(shù)字盾碗,并用一個棧輔助,每次來一個數(shù)就循環(huán)判斷 棧里最后一位的是否>新來的數(shù)字穆刻,是則出棧且k=k-1, 不是則繼續(xù)遍歷下一個數(shù)字置尔,當(dāng)k=0的時候,說明我們已經(jīng)把可以移出去的數(shù)字都移出去了氢伟。剩下的數(shù)字就是我們要的榜轿。
這里要注意的一個邊界情況,可能數(shù)字有部分是按照從小到大的順序排列朵锣,這個時候k不為零谬盐,我們只要取[:-k]即可

3.解題過程

Begin(算法開始)
輸入 長度為N的數(shù)字字符串num,和刪除的個數(shù)k
IF len(num) == k: return '0'
定義輸出列表
遍歷字符串:
? while k and out and 列表末端字符>當(dāng)前字符:
? ? 末端出列
? ? k-=1
? 當(dāng)前字符加入列表
當(dāng)k不為零的時候表示當(dāng)前列表中前[:-k]使我們要的結(jié)果
當(dāng)k為零時,列表中所有的字符即為我們要串聯(lián)的數(shù)字
返回連接列表后的結(jié)果
End (算法結(jié)束)

Begin(算法開始)
輸入 長度為N的數(shù)字字符串num,和刪除的個數(shù)k
IF len(num) == k: return '0'
剩余的字符串個數(shù)為res=N-k
ind = 0
while res>0://尚沒有湊夠我們需要的字?jǐn)?shù)
? 求出num[ind:N-res+1]之間最小的數(shù) cur_min并把其加入輸出字 符串out诚些,并記錄其在num中的index
? ind = ind+index+1,res-=1
?重復(fù)上述直到res==0
return str(int(out))
End (算法結(jié)束)

具體代碼(python)已對應(yīng)實現(xiàn)飞傀,但是測試用例代碼還沒完善,如上述思路有不足之處請批評指正诬烹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砸烦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绞吁,更是在濱河造成了極大的恐慌幢痘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家破,死亡現(xiàn)場離奇詭異颜说,居然都是意外死亡购岗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門门粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喊积,“玉大人,你說我怎么就攤上這事玄妈∏牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵措近,是天一觀的道長溶弟。 經(jīng)常有香客問我女淑,道長瞭郑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任鸭你,我火速辦了婚禮屈张,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袱巨。我一直安慰自己阁谆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布愉老。 她就那樣靜靜地躺著场绿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫉入。 梳的紋絲不亂的頭發(fā)上焰盗,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音咒林,去河邊找鬼熬拒。 笑死,一個胖子當(dāng)著我的面吹牛垫竞,可吹牛的內(nèi)容都是我干的澎粟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欢瞪,長吁一口氣:“原來是場噩夢啊……” “哼活烙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遣鼓,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤啸盏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后譬正,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宫补,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡檬姥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粉怕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片健民。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贫贝,靈堂內(nèi)的尸體忽然破棺而出秉犹,到底是詐尸還是另有隱情,我是刑警寧澤稚晚,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布崇堵,位于F島的核電站,受9級特大地震影響客燕,放射性物質(zhì)發(fā)生泄漏鸳劳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一也搓、第九天 我趴在偏房一處隱蔽的房頂上張望赏廓。 院中可真熱鬧,春花似錦傍妒、人聲如沸幔摸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽既忆。三九已至,卻和暖如春嗦玖,著一層夾襖步出監(jiān)牢的瞬間患雇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工踏揣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庆亡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓捞稿,卻偏偏與公主長得像又谋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子娱局,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容