2020 11 15 移掉k位數字

2021-10-25 09:46:21 字數 1425 閱讀 5559

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

示例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。

我的思路是這樣的,移出k位數字,就是從這個num裡有序的選取取num.length-k位數字,為了保證能夠成功選到符合要求的數字,必須規定一些選擇方法,首先每做乙個選擇的時候必須限定它的選擇空間,例如從7位數字中去除3位數字,即從7位數字中選擇4位數字,首先選擇第一位,即千位的數字,它的選擇空間只能是第一位到第四位,如果選擇到了第五位,那麼後面只剩下2位,而後續還要選擇三位數字,不符合要求,如果在選擇前面的四位,那麼不符合這個演算法的要求。所以,設定start位和finish位來控制選擇的空間,這是我這個演算法的主要思路,其餘的就是一些結構控制的設計。

public

class

nov_15_removekdigits

int start,finish;

int index=0;

int min;

for(

int i=

0;ilength()

-k;i++

) j++;}

b[i]

=min;

index++;}

string num2="";

for(

int i=

0;i)int num3;

if(num2=="")

else

string n= string.

valueof

(num3)

;return n;

}public

static

void

main

(string[

] args)

}

其實這個演算法還存在不小的缺陷,比如它有輸入的num是有限制的,在leetcode的上進行用力測試的時候2000位的用例測試失敗,還有一種情況就是,我這個演算法是基於選擇的所以會出現簡單問題複雜化的可能。所以,這個演算法還有帶完善。

關於這道題目,官方給出的答案在以下鏈結中

移掉K位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。輸入 num 10200 k 1 輸出 200 解釋 移掉首位的 1 剩下的數字為 20...

移掉K位數字

移掉k位數字 給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例 2 輸入 num 10200 k 1 輸出 200 ...

移掉k位數字

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