移除 K 位得到最小值—9
阿新 • • 發佈:2018-11-09
貪心演算法,思路:考慮最前面的數與後面的數比較,如果前面的數大於後面的數則刪除。
描述
有一行由 N 個數字組成的數字字串,字串所表示的數是一正整數。移除字串中的 K 個數字,使剩下的數字是所有可能中最小的。
假設:
字串的長度一定大於等於 K
字串不會以 0 開頭
輸入
一行由 N 個數字組成的數字字串(0 < N < 20),和一個正整數 K(K < N),兩個資料由空格隔開,如:1432219 3。
輸出
移除 K 位後可能的最小的數字字串。 如 1432219 移除 4, 3, 2 這 3 個數字後得到 1219,為所有可能中的最小值。
輸入樣例
1432219 3
10200 1
複製樣例
輸出樣例
1219
200
import java.awt.List; import java.util.LinkedList; public class 移除k位得到的最小值 { public static void main(String[] args) { System.out.println(solution("10200 1")); } private static String solution(String line) { String a[] = line.split(" "); LinkedList<Integer> c = new LinkedList<Integer>(); int num1 = a[0].length(); int num2 = Integer.valueOf(a[1]); if(num1 <= num2) return String.valueOf(0);//如果刪除的數與數的的長度相等,則返回0 for(int i = 0;i<num1;i++) { c.add(Integer.parseInt(String.valueOf(a[0].charAt(i))));//將所有資料插入連結串列 } int re_num=0; for(int i = 0;i<c.size()&&re_num<num2;i++) { if(c.get(i)>c.get(i+1)) { c.remove(i); i = 0; re_num++; } } if(re_num<num2) { for(int i = re_num;i<num2;i++) { c.remove(0); } } while(c.getFirst()==0) { c.remove(0); } String result = ""; for(int i = 0;i<c.size();i++) { result+=String.valueOf(c.get(i)); } return result; } }
`