HJ9 提取不重复的整数

167 阅读2分钟

Problem: HJ9 提取不重复的整数

题目描述

描述

输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

保证输入的整数最后一位不是0。

数据范围:  1n108 1≤n≤10^8

输入描述:

输入一个int型整数

输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1

输入:9876673
输出:37689

解题思路

使用hashSet

算法流程

  1. Scanner类来读取用户输入的整数。
  2. 定义一个变量num来存储用户输入的整数。
  3. 定义一个变量result来存储去除重复数字后的结果。
  4. 使用HashSet集合来存储已经出现过的数字,以便判断是否重复。
  5. 使用while循环来遍历整数的每一位数字。
  6. 在循环中,取出当前位的数字,并判断是否已经出现过。
  7. 如果当前位的数字没有出现过,则将其添加到结果中,并将其添加到HashSet集合中。
  8. 最后,输出结果到控制台。
  9. 总结一下,这段代码的功能是去除一个整数中重复的数字,并按照原来的顺序返回结果。

代码

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int result = 0;
        Set<Integer> set = new HashSet<>();
        while (num > 0) {
            int digit = num % 10;
            if (!set.contains(digit)) {
                result = result * 10 + digit;
                set.add(digit);
            }
            num /= 10;
        }
        System.out.println(result);
    }
}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(n)O(n)

  • 读取用户输入的整数需要O(1)的时间复杂度。
  • 遍历整数的每一位数字需要O(N)的时间复杂度,其中N是整数的位数。
  • 判断数字是否已经出现过,以及添加数字到结果和HashSet集合中,都需要O(1)的时间复杂度。
  • 空间复杂度:

添加空间复杂度, 示例: O(N)O(N)

  • 定义了一个变量num和result,它们都只占用常数级别的空间,所以对空间复杂度没有影响。
  • 使用了一个HashSet集合来存储已经出现过的数字,最坏情况下需要存储整数的所有位数,所以空间复杂度为O(N)。