1. 程式人生 > >華為線上程式設計題系列-9-提取不重複的整數

華為線上程式設計題系列-9-提取不重複的整數

問題描述:

問題描述

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. 本題總結.

這個題給我的感悟是:
- 根據題意,不需要列印的地方就不進行列印.簡化操作.