貪心演算法 移除K位數字

2021-10-06 19:34:24 字數 1176 閱讀 7946

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。

注意:num 的長度小於 10002 且 ≥ k。

num 不會包含任何前導零。

例子:輸入: num = 「1432219」, k = 3

輸出: 「1219」

解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。

問題:貪心策略

資料轉換

解決:貪心策略:有很多種移除一位的結果,但每種結果的位數都是相同的。相同位數的兩個數判斷大小的方法是什麼?較高位的大小

所以每次移除都要盡量使,結果的高位盡可能小。

所以從左到右比較,當高位大於次高位時,移除高位

資料轉換:

因為涉及元素比較移除,所以字串先轉為列表

處理好後的列表在轉為字串

**:

class

solution

:def

removekdigits

(self, num:

str, k:

int)

->

str:

nums=

[i for i in num]

for i in

range

(k):

for j in

range

(len

(nums)-1

):if nums[j]

>nums[j+1]

: nums.pop(j)

break

else

: nums.pop(

) j=

0#因為類似【』1『,『0』,』2『】,k=1 結果為【『0』,』2『】,所以列表最後要去除以0開頭的連續0元素,記錄第乙個非0元素位置

for i in nums:

if i==

'0':

j+=1else

:break

#因為類似【『0』,『0』】 會在上一步變為【】,所以要判斷

return

''.join(nums[j:])

if j!=

len(nums)

else

'0'

leetcode 402 移掉K位數字 貪心演算法

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例...

貪心演算法K題

今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心國家大事 非常6 7 超級女生,以及王小...

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...