Leetcode 移掉k位數字

2021-09-17 01:26:44 字數 1488 閱讀 7828

給定乙個以字串表示的非負整數 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。

思路分析:(1)首先分析當k的值小於0或者k的值大於給定字串的長度時,返回給定字串

(2)當給定字串的長度和k值相等時返回「0」

(3)除以上兩種特殊情況則有如下分析:

a.我們為了得到乙個較小的序列,需要從高位出發,如果下一位數字比當前的數字小,並且刪除的次數k還沒使用完的話,就刪除當前的數字,接著繼續向前比較,最後會得到乙個較小的序列。

b.具體實現:由於字元可以直接比較大小,故我們可以選用乙個char型別的陣列stack作為棧,並且維持該棧的公升序規則,用top作為棧頂,如果當前元素小於棧頂元素,則棧頂元素出棧(即top--),否則將當前元素壓棧(即stack[top++]=當前字元)。

注意:由於可能是0開頭的字元陣列,故需要統一改字元陣列開頭的0的個數count.

最後配合string類的乙個建構函式

string(char value, int offset, int count)

分配乙個新的string,它包含取自字元陣列引數乙個子陣列的字元。

即可得到目標字串。

class solution 

if(num.length()==k)

//定義乙個字元陣列模擬棧

char stack=new char[num.length()];

//定義乙個棧頂標誌

int top=0;

//記錄除k位之外的位數

int weishu=num.length()-k;

//遍歷輸入的字串

for(int i=0;i0 && cur0)

stack[top++]=cur; //當前字元入棧並更新棧頂標誌

}//統計開頭為0的個數

int count=0;

for(int i=0;i}

//返回目標字串

return count==weishu?"0":new string(stack,count,weishu-count);

}}

移掉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。示例...