這兩個代碼都是徹底本身獨立想出來的,代碼還挺簡潔的...加油~mtgit
leetcode 402算法
給定一個以字符串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。app
注意:spa
num 的長度小於 10002 且 ≥ k。
num 不會包含任何前導零。
示例 1 :code
輸入: num = "1432219", k = 3
輸出: "1219"
解釋: 移除掉三個數字 4, 3, 和 2 造成一個新的最小的數字 1219。
示例 2 :blog
輸入: num = "10200", k = 1
輸出: "200"
解釋: 移掉首位的 1 剩下的數字爲 200. 注意輸出不能有任何前導零。
示例 3 :隊列
輸入: num = "10", k = 2
輸出: "0"
解釋: 從原數字移除全部的數字,剩餘爲空就是0。leetcode
核心: 問題轉換 --選取長度爲len(nums)-k的子序列,是子序列字典序最小rem
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