移掉K位數字
貪心思想
最高位要儘可能的小,次高位也是要保留小的數字。所以遍歷這個string時遇到比前一位小的數字的話,就要把前一位刪掉,把當前這一位儲存進去。
用一個vector模擬棧,注意一些情況,1.當前的數如果是0怎麼辦,因為0不能做最高位,所以要判斷結果res中是否為空,不為空的話,0才可以加入。2.如果string 都遍歷完了,k還大於0怎麼辦,出現這種情況的原因是string的每一位是遞增關係。3.結果為空返回“0”
class Solution { public: string removeKdigits(string num, int k) { vector<int>res;//模擬棧 string str = "";//結果string //遍歷Num的每位 for(int i =0;i<num.size();++i) { int number = num[i] - '0';//先轉成int //如果res中有數的話,並且現在正在遍歷的這個數小於“棧頂”元素,並且k的值還沒有用完的話 //就把棧頂元素(也就是末尾元素)彈出來,然後可用次數減1 while(res.size()!=0 && number < res[res.size()-1] && k>0) { res.pop_back(); k--; } //如果當前這個數不是0的話,就可以直接放入,或者,如果是0的話,那就看“棧”中還有沒數,有的話,也可以直接加入 if(number!=0 || res.size()!=0) { res.push_back(number); } } //遍歷結束後,有可能k沒有用完,比如Num= 12345,k=2,遍歷結束時k還是=2 while(res.size()!=0 && k>0) { res.pop_back(); k--; } //最後將res中的int連線成string for(int i =0;i<res.size();++i) { str.append(1,'0'+res[i]); } if(str == "")//特殊情況 str = "0"; return str; } };
相關推薦
402.移掉K位數字
給定一個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。 注意: num 的長度小於 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: nu
402. 移掉K位數字
給定一個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。 注意: num 的長度小於 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: nu
Leetcode 402.移掉k位數字
移調k位數字 給定一個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。 注意: num 的長度小於 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: num = "1432219", k = 3
移掉K位數字
貪心思想最高位要儘可能的小,次高位也是要保留小的數字。所以遍歷這個string時遇到比前一位小的數字的話,就要把前一位刪掉,把當前這一位儲存進去。用一個vector模擬棧,注意一些情況,1.當前的數如果是0怎麼辦,因為0不能做最高位,所以要判斷結果res中是否為空,不為空的話
演算法46----移除K位數字
一、題目:移除K位數字 給定一個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。 注意: num 的長度小於 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: num = "1432219", k = 3 輸
算法46----移除K位數字
一個 type 就是 digi n) ack strong 新的 輸入 一、題目:移除K位數字 給定一個以字符串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。 註意: num 的長度小於 10002 且 ≥ k。 num 不會包含任何前導零。
有趣的演算法題之移除 k 位數字後使剩下的數字最小
原文:微信公眾號:程式設計師小灰——刪去k個數字後的最小值 1 題目 給定一個整數,從該整數中去掉 k 個數字,使剩下的數字組成的新整數儘可能小,那麼應該選擇去掉的數字。 2 思路 感覺這是個挺有意思的問題,所以當時認真的讀了讀也認真的想了想,真是不想不知道,一想才發現
移除 K 位得到最小值—9
貪心演算法,思路:考慮最前面的數與後面的數比較,如果前面的數大於後面的數則刪除。 描述 有一行由 N 個數字組成的數字字串,字串所表示的數是一正整數。移除字串中的 K 個數字,使剩下的數字是所有可能中最小的。 假設: 字串的長度一定大於等於 K 字串不會以 0 開頭
leetcode 402 Remove K Digits(移除k個數字 貪心)
分析和思路: 就是說給一個字串形式的正數,刪除k個數字,使得字串數字最小 貪心思路 那麼就是每次刪除一個數,每次保證高位最小。 java程式碼: class Solution { public String removeKdigits(String num
10、移除k位得到最小值
(個人水平有限,請見諒!) 描述: 有一行由 N 個數字組成的數字字串,字串所表示的數是一正整數。移除字串中的 K 個數字,使剩下的數字是所有可能中最小的。 假設: 字串的長度一定大於等於 K。 字串不會以 0 開頭。 輸入: 一行由 N 個數
將數組移k位右
code pub 思路 str print 右移 ++ println 互換 思路 : 反轉的算法 *3次即可先把 第 k-n-1 反轉把0 -k-1 反轉整體反轉 即可 //把數組循環右移K位 public class Test_plus { /* *數組
實現將一維陣列A(下標從1開始)中的元素迴圈右移k位,要求只用一個元素大小的輔助空間
#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入陣列元素個數:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf
實現將一維數組A(下標從1開始)中的元素循環右移k位,要求只用一個元素大小的輔助空間
維數 輔助 數組a emp 數組元素 移動 scan clu n) #include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入數組元素個數:\n"); scanf("%d",&n); for
設計一個演算法,將一維陣列A(下標從1開始)中的元素迴圈右移k位,要求只用一個元素大小的附加儲存空間。給出演算法的時間複雜度。
程式碼 #include<stdio.h> #include<stdlib.h> #define n 10 int main() { int a[n] = { 0,1,2,3,4,5,6,7,8,9 }; int k, t=0,i,j,m; printf(
組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZde
這道題要注意字串為空的情況,否則通不過 public class Solution { public String LeftRotateString(String str,int n) { StringBuffer buf=new StringBuff
把一個含有N個元素的陣列迴圈右移K位, 要求時間複雜度為O(N)
分析與解法 這個解法其實在《啊哈!演算法》有講到。 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。
day23之陣列迴圈右移k位+去除重複的字元。
將N個字元的陣列,迴圈右移K位。時間複雜度O(N)。 #include<iostream> using namespace std; #include<cassert> #include<string.h> vo
陣列迴圈右移 k 位
例: arr[] = 12345678; k = 2 1.逆序前 6(8-2) 位 -> 65432178 2.逆序後 2 位 -> 65432187 3.全部逆序 -> 7
陣列:如何把一個數組迴圈右移K位
問題描述: 假設要把陣列12345678右移2位,變為78123456。 分析: 方法一: 比較移位前後陣列序列的形式,不難看出,其中有兩段序列的順序是不變的,即就是 78 和 123456, 可以把這兩段看做兩個整體,右移k位就是把陣列的兩部分交換一下。時間複雜度為
將陣列迴圈右移k位
將陣列移位就相當於將兩部分序列交換位置,於是將陣列移位轉換為三次反轉操作,如123456右移2位結果為561234,過程:分別將1234和56反轉為4321和65,之後對反轉結果432165做一次反轉結果為561234,java程式碼如下: //將數字