**《保留最大的数》

题目描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。

输入描述:

输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。

输出描述:

输出保留下来的结果。

示例1

输入

复制

325 1

输出

复制

35

python实现:

法一(只通过40%的样例):

if __name__ == '__main__':
    d = int(input())
    k = int(input())

    a = []
    while d:
        t = d % 10
        d = d / 10
        a.append(int(t))

    b = a[::-1]
    c = []
    f = 0
    kk = len(b) - k
    while kk:
        s = max(b[f : len(b) - kk + 1])
        t = b.index(s)
        b[t] = -1
        kk = kk - 1
        f = t + 1
        c.append(s)

    s = str(c[0])
    for i in range(1, len(c)):
        s = s + str(c[i])
    print s

法二:

思路:从左至右,比较两个数的大小,假如右边的数比左边的数小,则删掉该数,更新列表。假如到最后都没删掉指定个的数,则从前到后选取数即为答案,否则删完之后的列表即为答案。

if __name__ == '__main__':
    d = list(raw_input())
    k = int(input())

    t = len(d)
    i = 0
    
    while k > 0 and i < t - 1:
        if int(d[i]) >= int(d[i + 1]):
            i = i + 1
        else:
            d.pop(i)
            k = k - 1
            t = t - 1
            if i > 0:
                i = i - 1
            else:
                i = 0
    if k > 0:
        print ''.join(d[:-k])
    else:
        print ''.join(d)

猜你喜欢

转载自blog.csdn.net/w113691/article/details/81264614
今日推荐