1. 程式人生 > >牛客網線上程式設計(八):保留最大的數-python

牛客網線上程式設計(八):保留最大的數-python

題目描述

給定一個十進位制的正整數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)來進行所有情況的統一。