题解 | #提取不重复的整数#

提取不重复的整数

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());
            }
        }
    }
}

这段代码的主要逻辑如下:

  1. 首先,通过 Scanner 从控制台输入一个整数,存储在 target 变量中。
  2. 接下来,通过判断 target 的个位数是否为 0,如果是,则直接返回。
  3. 然后,根据 target 的大小进行不同的处理:如果 target 小于 10,说明只有一位数字,直接输出。如果 target 大于等于 10,进入循环。
  4. 在循环中,将 target 的个位数字添加到 set 集合中,并将 target 除以 10,继续处理下一位数字。
  5. 当 target 的值小于 10 时,将其添加到 set 集合中,保证最后一位数字也被处理。
  6. 最后,通过迭代器遍历 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 集合是一种常见的做法,它可以确保元素的顺序和遍历方式的一致性,并且提供了更灵活的操作方式。

全部评论

相关推荐

特斯联 后端开发 300 + 450餐补
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务