题解 | #称砝码#hashset去重,三层循环,遍历砝码,遍历砝码个数,遍历当前set的结果

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            HashSet<Integer> set = new HashSet<>();//存放所有可能的结果,不用担心重复问题
            set.add(0);//初始化为0
            int n = in.nextInt();//个数
            int[] w = new int[n];
            int[] nums = new int[n];
            for(int i=0;i<n;i++){
                w[i] = in.nextInt();//砝码的重量
            }
            for(int i=0;i<n;i++){
                nums[i] = in.nextInt();//砝码个数
            }
            for(int i=0;i<n;i++){//遍历砝码
                ArrayList<Integer> list = new ArrayList<>(set);//取当前所有的结果
                for(int j=1;j<=nums[i];j++){//遍历个数
                    for(int k=0;k<list.size();k++){
                        set.add(list.get(k) + w[i] * j);
                    }
                }
            }
            System.out.println(set.size());
        }
    }
}
全部评论
完了 看答案都看不明白
4
送花
回复
分享
发布于 2022-07-15 22:21
23行:应该是 set.add(list.get(k) + w[i]);
1
送花
回复
分享
发布于 2022-03-07 11:05
蔚来
校招火热招聘中
官网直投
时间复杂度炸了吧
1
送花
回复
分享
发布于 2023-05-05 17:36 广东
set.add(list.get(k) + w[i] * j); 这一句什么意思啊?
1
送花
回复
分享
发布于 2023-06-17 17:52 广东
j可以为0吧?
点赞
送花
回复
分享
发布于 2021-12-21 21:38
有点像广度优先算法耶
点赞
送花
回复
分享
发布于 2022-03-30 11:07
写的太酷了,简洁
点赞
送花
回复
分享
发布于 2022-05-03 02:52
输入数据显示是每行怎样,加载可以用nextInt()?那输入描述干嘛说每行怎样
点赞
送花
回复
分享
发布于 2022-07-27 11:38
挺好的思路
点赞
送花
回复
分享
发布于 2022-10-21 16:11 北京
耗时爆炸了,70多ms
点赞
送花
回复
分享
发布于 2023-04-27 17:15 美国
set本来不就是不能重复?
点赞
送花
回复
分享
发布于 2023-06-17 14:55 广东
666,牛逼,我之前遗漏的场景,被你三行代码解决了,大佬不愧是大佬
点赞
送花
回复
分享
发布于 2023-10-31 19:55 广东

相关推荐

86 21 评论
分享
牛客网
牛客企业服务