華為線上程式設計題系列-9-提取不重複的整數
阿新 • • 發佈:2019-01-06
問題描述:
1. 問題涉及知識點.
string.contains(key)
和string.substring()
使用.
2. 自己解法.
- 我是按照字串的思路解決的.
StringBuilder
新建一個sb,每次使用string.contains
判斷是不是包含,不包含使用StringBuilder.add
新增進去.
package com.chaoxiong.niuke.huawei;
import java.util.Scanner;
/**
* Create by tianchaoxiong on 18-4-9.
*/
public class HuaWei_9_2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int key = scanner.nextInt();
System.out.println(Convert(key));
}
}
private static String Convert(int key) {
String strKey = key+"" ;
StringBuilder sb = new StringBuilder("");
for(int i=0;i<strKey.length();i++){
char tmpChar = strKey.charAt(strKey.length()-1-i);
if(!sb.toString().contains(tmpChar+"")) {
sb.append(tmpChar);
}
}
return sb.toString();
}
}
3. 優質答案.
解法一: 使用標記陣列.
- 使用一個十位的陣列作為標誌儲存出現過的字元.
- 每次使用ascii減去48,直接把char轉為int.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String s=scanner.nextLine();
int len=s.length();
int []arr1=new int[10];//標誌陣列
for(int i=len-1;i>=0;i--){
if(arr1[s.charAt(i)-48]==0){
System.out.print(s.charAt(i)-48);//直接列印
arr1[s.charAt(i)-48]++;//標記出現過的字元.
}
}
}
}
}
解法2:使用arrayList
每次通過list.contarins
來判斷是否包含.
此處應該注意的是HashSet
輸出順序時候Hash演算法決定,不能保證和你輸入的順序一直,所以不能用.
package com.chaoxiong.niuke.huawei;
import java.util.*;
/**
* Create by tianchaoxiong on 18-4-9.
*/
public class HuaWei_9_3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int key = scanner.nextInt();
Convert(key);
}
}
private static void Convert(int key) {
String string = String.valueOf(key);
List<Character>charList = new ArrayList<Character>();
int N = string.length();
for(int i=0;i<N;i++){
char tmp = string.charAt(N-1-i);
if(!charList.contains(tmp))
charList.add(tmp);
}
for (char each:charList){
System.out.print(each);
}
}
}
4. 本題總結.
這個題給我的感悟是:
- 根據題意,不需要列印的地方就不進行列印.簡化操作.