Problem: HJ9 提取不重复的整数
题目描述
描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是0。
数据范围:
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入:
9876673
输出:37689
解题思路
使用hashSet
算法流程
- Scanner类来读取用户输入的整数。
- 定义一个变量num来存储用户输入的整数。
- 定义一个变量result来存储去除重复数字后的结果。
- 使用HashSet集合来存储已经出现过的数字,以便判断是否重复。
- 使用while循环来遍历整数的每一位数字。
- 在循环中,取出当前位的数字,并判断是否已经出现过。
- 如果当前位的数字没有出现过,则将其添加到结果中,并将其添加到HashSet集合中。
- 最后,输出结果到控制台。
- 总结一下,这段代码的功能是去除一个整数中重复的数字,并按照原来的顺序返回结果。
代码
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(1)的时间复杂度。
- 遍历整数的每一位数字需要O(N)的时间复杂度,其中N是整数的位数。
- 判断数字是否已经出现过,以及添加数字到结果和HashSet集合中,都需要O(1)的时间复杂度。
- 空间复杂度:
添加空间复杂度, 示例:
- 定义了一个变量num和result,它们都只占用常数级别的空间,所以对空间复杂度没有影响。
- 使用了一个HashSet集合来存储已经出现过的数字,最坏情况下需要存储整数的所有位数,所以空间复杂度为O(N)。