移掉k位數字
這個題目寫的時候思路好像不是很清晰,總之最開始思路是 每個元素(cur指向)和它後面一位比較,若是更大,則刪除這一位。 然而忘記了刪除之後,處理指標cur應當後移一位,讓已處理過的元素與當前元素再重新比較來決定取捨。於是拆了東牆補西牆甚至又用乙個指標pre來暫存已處理過的最後乙個結點,很麻煩而且有紕漏導致過綠不了。以下是不好看的菜雞寫的c++版本:最後看題解,發現整體思路沒錯,換成每個元素(cur)指向和它前面一位比較,若是更小,則刪除前一位。 這樣就不用刪除之後再移動cur指標了。。。
string removekdigits(string num, int k)
string::iterator pre=num.begin();
for(string::iterator it=num.begin()+1;it!=num.end()&&k>0;)
else
}if(k>0)
for(string::iterator it=num.begin();it!=num.end();)
else
break;
}if(num.size()==0)
}
def removekdigits(self, num:int, k:int)->str :
stack=
remain=len(num)-k
for digit in num:
while k and stack and stack[-1]>digit:
k-=1
stack.pop()
return ''.join(stack[:remain]).lstrip('0') or '0'
又意識到自己對python的了解程度僅僅停留在語法層面我能看懂但我肯定不會自己寫。。。
402 移掉K位數字
給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例...
402 移掉K位數字
給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。維護乙個單調遞增棧,解決拆開的最值問題 class solution q.offerlast num.charat i for int i 0 i k i stringbuffer sb newstringbuff...
402 移掉K位數字 golang
示例 2 輸入 num 10200 k 1 輸出 200 解釋 移掉首位的 1 剩下的數字為 200.注意輸出不能有任何前導零。示例 3 輸入 num 10 k 2 輸出 0 解釋 從原數字移除所有的數字,剩餘為空就是0。如果下乙個元素比當前棧元素小,移除當前元素,把下乙個元素入棧 10200 k ...