【华为OD机试真题 JAVA】猜密码


活动地址:CSDN21天学习挑战赛

1、凡事不必苛求,来了就来了;凡事不必计较,过了就过了;遇事不要皱眉,笑了就笑了;结果不要强求,做了就对了。

创作计划

**
1,机缘

A,工作中遇到了瓶颈
B,技术方面得到提升
C,金钱方面得到改善

2,收获

A,根据活动的模板整理内容有条理,有思路
B,在行为上约束自己
C,很多志同道合的领域同行
D,之前下班回家,只是去刷抖音,玩物丧志。现在会想着去打卡

3,日常

  1. 一步一个脚印,先迈出脚再说
  2. 是人都会累,看你想要怎样的人生,我只是不想年迈之后叹息前半生。
    . …

4,憧憬

技术能跟上时代、工资 😊😊😊

**

学习计划

**
1,学习目标

解决 【华为OD机试真题 JAVA】猜密码

2,学习内容

题目内容
小杨申请了一个保密柜,但是他忘记了密码。只记得密码都是数字,而且所有数字都是不重复的。请你根据他记住的数字范围和密码的最小数字数量,帮他算下有哪些可能的组合,规则如下:1、输出的组合都是从可选的数字范围中选取的,且不能重复;2、输出的密码数字要按照从小到大的顺序排列,密码组合需要按照字母顺序,从小到大的顺序排序。3、输出的每一个组合的数字的数量要大于等于密码最小数字数量;4、如果可能的组合为空,则返回“None…"
输入要求
1、输入的第一行是可能的密码数字列表,数字间以半角逗号分隔
2、输入的第二行是密码最小数字数量
输出要求
1、可能的密码组合,每种组合显示成一行,每个组合内部的数字以半角逗号分隔,从小到大的顺序排列。
2、输出的组合间需要按照字典序排序。
3、2,3,4放到2,4的前面

示例
输入 2,3,4
2
输出
2,3
2,3,4
2,4
3,4

示例
输入 2,0
1
输出
0
0,2
2

3,学习时间

下班后

4,学习产出

根据提示完成这道题

**

学习日记

**
1,学习知识点

题目的难点在于 长度为m的数组中取出n个数

2,学习遇到的问题

递归看的人麻了

3,学习的收获

理解了这道题的递归调用

4,实操

    public static void main(String[] args) {
//        int input[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
        int input[] = {2, 3, 4};
        int minNum = 2;
        // 转为list
        List<Integer> tempList = new ArrayList<>();

        for (int i : input) {
            tempList.add(i);
        }
        // 对list降序排序
        Collections.sort(tempList);

        LinkedList<Integer> resultList = new LinkedList<>();
        if (minNum > input.length)
            System.out.print("None");
        else {
            dfs(tempList, resultList, 0, minNum);
        }
    }


    /**
     * 数组 M 中取出长度大于 N 的数组
     *
     * @param tempList 原始数组
     * @param res      用于递归的数组
     * @param i        记录递归数组的index
     * @param minNum   最小长度
     */
    public static void dfs(List<Integer> tempList, List<Integer> res, int i, int minNum) {
        if (res.size() >= minNum) {
            for (int a : res) {
                if (a != res.get(res.size() - 1)) {
                    System.out.print(a + ",");
                } else {
                    System.out.println(a);
                }
            }
        }

        for (int j = 0; j < tempList.size(); j++) {
            if (res.size() == 0 || tempList.get(j) > res.get(res.size() - 1)) {
                // 将开始的数据放入放入list
                res.add(tempList.get(j));
                dfs(tempList, res, j + 1, minNum);
                // 当前数据遍历完成,删除
                res.remove(res.size() - 1);
            }

        }

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值