华为在线编程题系列-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. 本题总结.

这个题给我的感悟是:
- 根据题意,不需要打印的地方就不进行打印.简化操作.

猜你喜欢

转载自blog.csdn.net/u012222078/article/details/80197291