402. 移掉K位數字 (按位考慮 貪心)
LeetCode: 402. 移掉K位數字
題目大意: 移掉 k 個數 >> 使得這個數最小 ( 不能有前導 0 )
貪心題 >> 看到題面 >> 沒有思路
貪心思路:
按位考慮,考慮第一位能不能通過刪數得到1,不能就是2,找到第一位能得到的最小值,把前面全部刪掉, 第二位也是一樣
還有考慮 0
貪心程式碼
public String removeKdigits(String num, int k) {
if (num.length() == k) return "0";
StringBuffer sb = new StringBuffer();
// boolean b = true;
int start = 0, len = num.length() - k;
while (k > 0) {
if(sb.length() == len) break ;
boolean f = false;
for (int j = 0; j <= 9; j++) {
// 找 0 ~ 9
// 第一位不能要 0
// if(b) { b = false; continue ; }
// 按位考慮
for (int i = start; i < num.length(); i++) {
if(i - start > k) break ;
if(num.charAt(i) - '0' == j){
sb.append(num.charAt(i) - '0');
// k >> skip 刪除當前的幾個
k -= (i - start);
start = i + 1;
f = true;
// 如果不夠減
break ;
}
}
if (f) break;
}
}
// 1112219 >> k = 3 的情況, sb 取到 1111 答案了, k 還是 3 (沒必要繼續迴圈了)
if(sb.length() != len) sb.append(num.substring(start));
int cnt = 0;
while (cnt < sb.length() - 1 && sb.charAt(cnt) == '0'){
cnt++;
}
return sb.substring(cnt);
}
相關文章
- 移掉 K 位數字
- LeetCode 402 移掉K位數字 HERODING的LeetCode之路LeetCode
- 對十進位制數字的按位輸出,取反,並求其位數
- 打家劫舍+數字範圍按位與
- 在考慮繼續堅持現有崗位,還是考慮轉崗
- 雙重按位非運算子 ~~ 對數字取整
- 2^k進位制數
- 1106: 找第K位數
- [LeetCode] 402. Remove K DigitsLeetCodeREMGit
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 刪數問題(貪心)
- 貪心-刪數問題
- 1082. 數字遊戲 (數位DP)遊戲
- Java按位或合併ipv6字首和字尾Java
- java.sql.SQLException: 數字溢位JavaSQLException
- abc238D 兩數之和跟按位與
- 1295 統計位數為偶數的數字
- 貪心
- 我考慮的是來看考慮考慮勞福德
- JavaScript | 按位或運算子JavaScript
- JavaScript & 按位與運算子JavaScript
- JavaScript ~ 按位非運算子JavaScript
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- 四位整數位數拆分
- 給一個不多於五位的正整數,要求:1.求出它是幾位數;2.分別輸出每一位數字;3.按逆序輸出各位數字,例如原數為321,應輸出123.
- 位運算子之---按位取反運算子(簡單易懂)
- 數字每三位加逗號
- 【java】隨機生成6位的數字Java隨機
- 統計位數為偶數的數字(C++)C++
- JZ-070-數字序列中的某一位數字
- 位、位元組、字
- JavaScript ^ 按位異或運算子JavaScript
- Java中按位取反運算子Java
- C# ~按位取反運算子C#
- 反悔貪心
- Supermarket(貪心)
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- 使用 Haskell 將十進位制數字轉成羅馬數字Haskell