牛客網線上程式設計(八):保留最大的數-python
阿新 • • 發佈:2018-12-19
題目描述
給定一個十進位制的正整數number,選擇從裡面去掉一部分數字,希望保留下來的數字組成的正整數最大。
輸入描述:
輸入為兩行內容,第一行是正整數number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的數字數量cnt 1 ≤ cnt < length(number)。
輸出描述:
輸出保留下來的結果。
示例1
輸入
325
1
輸出
35
程式碼實現
import sys lines=sys.stdin.readlines() Str=lines[0].strip() num=int(lines[1]) def func(s,start): for i in range(start,len(s)-1): if s[i]<s[i+1]: return s[:i]+s[i+1:],max(0,i-1) return s[:-1],len(s) start=0 for i in range(num): Str,start=func(Str,start) print(Str)
原理說明
先舉個更加普遍的例子743532,去掉4個數字,結果是75
首先,我們先遍歷這個數字字串,當前數字i小於下個數字i+1,去除i,那麼下次去除數字時,從i-1開始遍歷,例如我們例子中,去除的第一數字就是5前面的3,得到74532,下次從4處開始遍歷(不從頭遍歷是為了降低複雜度),第二個去除的數字是4,得到7532,第三個是2,得到753,那麼問題來了,現在整個數字是按位遞減的(有時候有相等的時候,比如7553,這些都不影響後面的計算),第四個數字就去除最後一個數字,程式中返回len(s)是為了下次進入函式時,不進入迴圈體。最後要解釋的是max(0,i-1),我們不是要從i-1開始遍歷嗎?但是有可能i=0,為了解決這種情況,我們使用max(0,i-1)來進行所有情況的統一。