题解 | #提取不重复的整数#
提取不重复的整数
https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1
方法一
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ // 使用HashSet来判断是否是不重复的//注意这里不需要使用hashmap HashSet<Integer> hs = new HashSet<>(); int target = sc.nextInt();// 获取代求解的值 while(target != 0){ // 求解每位上面的整数 int temp = target % 10; if(hs.add(temp)) // 如果能加入,就是说明没有重复 System.out.print(temp); target /= 10;// 除10能去掉最右边的数字 } System.out.println(); } } }
于是有了新的方法
来自 https://www.nowcoder.com/discuss/353150525598277632?sourceSSR=users
import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Scanner; import java.util.Set; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int target = scanner.nextInt(); if (target % 10 == 0) { return; } if (target < 10) { System.out.print(target); } else { Set<Integer> set = new LinkedHashSet<>(); while (target / 10 != 0) { set.add(target % 10); target = target / 10; if (target < 10) { set.add(target); } } Iterator<Integer> iterator = set.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()); } } } }
这段代码的主要逻辑如下:
- 首先,通过 Scanner 从控制台输入一个整数,存储在 target 变量中。
- 接下来,通过判断 target 的个位数是否为 0,如果是,则直接返回。
- 然后,根据 target 的大小进行不同的处理:如果 target 小于 10,说明只有一位数字,直接输出。如果 target 大于等于 10,进入循环。
- 在循环中,将 target 的个位数字添加到 set 集合中,并将 target 除以 10,继续处理下一位数字。
- 当 target 的值小于 10 时,将其添加到 set 集合中,保证最后一位数字也被处理。
- 最后,通过迭代器遍历 set 集合,并将结果打印输出。
需要注意的是,LinkedHashSet
是用于存储不重复元素的集合,且维护元素的插入顺序。因此,它能够保证返回的新整数按照从右向左的阅读顺序,并且不含重复数字。
总体而言,这段代码实现了题目要求的功能,但存在一些不规范和易读性不佳的地方,例如变量命名和代码注释。可以进一步优化和改进代码的可读性。
关于迭代:
Iterator<Integer> iterator = set.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()); }
在这段代码中,使用 Iterator
遍历 Set
集合的主要目的是控制元素的输出顺序。尽管 LinkedHashSet
会保留元素插入的顺序,但使用迭代器可以确保以正确的顺序输出元素。
Iterator
接口提供了一种遍历集合元素的通用方式,通过调用 iterator()
方法可以获取集合的迭代器。在这个例子中,set.iterator()
返回一个迭代器,该迭代器可以按照元素的插入顺序依次访问集合中的元素。
通过使用 Iterator
,可以确保在遍历 Set
时按照正确的顺序输出元素,而不会受到内部数据结构的实现方式的影响。这在需要保持元素顺序的情况下特别有用。
至于为什么不直接输出整个 Set
,而是使用迭代器逐个输出元素,这可能是为了满足题目要求中的特定输出格式。另外,使用迭代器遍历集合可以提供更多的灵活性,例如在遍历过程中进行其他操作或对元素进行更复杂的处理。
总而言之,使用迭代器遍历 Set
集合是一种常见的做法,它可以确保元素的顺序和遍历方式的一致性,并且提供了更灵活的操作方式。