这两个代码都是完全自己独立想出来的,代码还挺简洁的...加油~mt
leetcode 402
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
注意:
num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
示例 1 :
输入: num = "1432219", k = 3
输出: "1219"
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
示例 2 :
输入: num = "10200", k = 1
输出: "200"
解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
示例 3 :
输入: num = "10", k = 2
输出: "0"
解释: 从原数字移除所有的数字,剩余为空就是0。
核心: 问题转换 --选取长度为len(nums)-k的子序列,是子序列字典序最小
1 class Solution: 2 def removeKdigits(self, num: str, k: int) -> str: 3 ans = [] 4 lenth = len(num)-k 5 for it in num: 6 while k and ans and ans[-1]>it: 7 ans.pop() 8 k -= 1 9 ans.append(it) 10 ans = ans[:lenth] 11 pos = 0 12 while pos<len(ans) and ans[pos]=='0': 13 pos+=1 14 ans = ans[pos:] 15 return "".join(ans) if len(ans) else '0'
leetcode 406
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
class Solution: def reconstructQueue(self, people): people.sort(key=lambda x: (-x[0], x[1])) ans = [] for it in people: ans.insert(it[1], it) return ans