问题描述:
在给定的n个数字的数子串,删除其中k(k<n)个数字后,剩下的数字按照原次序组成一个新的正整数。使得剩下的数字组成的新正整数最大。
问题分析:
贪心思想,每次从左到右,删除第一个小于后者的元素,如果没有,说明是已经降序排列,就从后面依次删除。(如果是要的是最小值则反之)
Python实现:
# @Time :2018/5/22 # @Author :Yinxing def delNum(s, k): n = len(s) if n<k: return None s = list(s) flag = 0 while k != 0: if flag == 0: for i in range(len(s) - 1): # 发现第一个小于后一个值的数字删除 if s[i] < s[i + 1]: del s[i] k -= 1 flag = 1 break if flag == 1 and k != 0: # 已经删除,但没有结束 flag = 0 else: # 已经遍历完,但没有发现前一个小于后一个的,从后面依次删除 n = len(s) s = s[:n-k] k = 0 return ''.join(s) if __name__ == '__main__': s, k = '494326', 3 print(delNum(s, k))发现问题,请留言指教哦