華為2018校招第二題 求去重後的最大整數
如:
輸入:234432
輸出:432
程式碼如下:
package test2;
import java.util.Collections;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
publicclass Main5 {
// 華為機試第二題,取消重複數字後的最大數,比如輸入的是:423234,輸出是:432
public static void main(String[] args) {
Scanner sc = new
TreeSet<Integer> set = new TreeSet<Integer>();
String[] strArr ;
int k = 0;
Long maxNum = 0L;
int st = 0;
TreeMap<Long, Boolean> map = new TreeMap<Long, Boolean>();
while(sc.hasNext()){
String line = sc.nextLine();
/*
* 思路:
* 1、首先將字串去重後得到的數放入一個大小小於10的陣列中;
* 2、枚舉出所有由這些數字組成的數;
* 3、將這些數放入TreeSet集合中;
* 4、遍歷TreeSet集合,判斷元素是否在原始串中出現過,若沒出現則將其刪除;
* 5、最後取出TreeSet中最後一個元素就是最大整數。
* */
// 1、首先將字串去重後得到的數放入一個大小小於10的陣列中;
for(int i=0 ; i<line.length() ; i++){
set.add(Character.getNumericValue(line.charAt(i)));
}
strArr = new String[set.size()];
for (Integer in : set
strArr[k] = in + "";
k++;
}
// 2、枚舉出所有由這些數字組成的數;3、將這些數放入TreeSet集合中;
permutate(strArr, st, map);
// 4、遍歷TreeSet集合,判斷元素是否在原始串中出現過,若沒出現則將其刪除;
for (Map.Entry<Long, Boolean> entry: map.entrySet()) {
Long key = entry.getKey();
boolean isFind = findStrByKey(line, key);
if(isFind){
map.put(key, true);
}
}
// 5、最後取出TreeMap中最後一個元素就是最大整數。
for (Map.Entry<Long, Boolean> entry: map.entrySet()) {
if(entry.getValue()){
maxNum = entry.getKey();
}
}
System.out.println(maxNum);
}
}
private static boolean findStrByKey(String line, Long key) {
String keyStr = key.toString();
String[] temp = new String[keyStr.length()];
int k = 0;
int j = 0;
for (int i = 0; i < keyStr.length(); i++) {
temp[i] = keyStr.charAt(i) + "";
//temp[i] = Character.getNumericValue(keyStr.charAt(i)) +"";
}
while(k<temp.length){
while(j<line.length()){
if(temp[k].equals(line.charAt(j)+"")){
k++;
j++;
break;
}
j++;
}
if(j==line.length()){
break;
}
}
// 最終判斷k是否到達末尾就可知存不存在;
if(k==temp.length){
returntrue;
}
returnfalse;
}
public static void permutate(String[] strArr, int st, TreeMap<Long, Boolean> map){
if(st == strArr.length-1){
// 將當前字串陣列表示的整數存入set。
StringBuilder sb = new StringBuilder();
// 列印當前字串
for (int i = 0; i < strArr.length; i++) {
String string = strArr[i];
//System.out.print(string + "");
sb.append(string);
}
//System.out.println();
String s = sb.toString();
map.put(new Long(s), false);
}else {
for(int i=st ; i<strArr.length ; i++){
swap(strArr, i, st);
permutate(strArr, st + 1, map);
swap(strArr, i, st);
}
}
}
private static void swap(String[] strArr, int i, int st) {
String temp = strArr[i];
strArr[i] = strArr[st];
strArr[st] = temp;
}
}
如發現問題,歡迎留言!