题解 | #牛群分组II#

牛群分组II

https://www.nowcoder.com/practice/9ebc32fee9b54bfa9f9c3deca80febb0

题目考察的知识点是:

递归回溯。

题目解答方法的文字分析:

每个数字只能选一次,要获取全部的方案,可以采用回溯的方法。从左到右选择是否把当前元素加入路径,当到达末尾或者累积总和大于等于要求时停止。当总和等于要求值时加入答案。由于我们优先选取当前元素的路径,所以得到字典序递增的答案

本题解析所用的编程语言:

java语言。

完整且正确的编程代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param candidates int整型一维数组
     * @param target int整型
     * @return int整型二维数组
     */
    public static LinkedList<LinkedList<Integer>> lists = new LinkedList<>();
    public int[][] cowCombinationSum2 (int[] candidates, int target) {
        // write code here
        Boolean[] flags = new Boolean[candidates.length];
        Arrays.fill(flags, false);
        search(candidates, target, 0, flags, new LinkedList<>());
        int[][] arr = new int[lists.size()][];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new int[lists.get(i).size()];
            for (int j = 0; j < lists.get(i).size(); j++) {
                arr[i][j] = lists.get(i).get(j);
            }
        }
        return arr;
    }

    public void search(int[] nums, int target, int cur, Boolean[] flags,
                       LinkedList<Integer> arrayList) {
        if (cur == target) {
            lists.add(new LinkedList<>(arrayList));
            return;
        }
        for (int i = 0; i < flags.length; i++) {
            if (!flags[i]) {
                if (arrayList.size() != 0 && nums[i] < arrayList.get(arrayList.size() - 1)) {
                    continue;
                }
                arrayList.add(nums[i]);
                flags[i] = true;
                search(nums, target, cur + nums[i], flags, arrayList);
                arrayList.remove(arrayList.size() - 1);
                flags[i] = false;
            }
        }
    }
}
#题解#
全部评论

相关推荐

不愿透露姓名的神秘牛友
01-31 04:00
神哥不得了:首先我就是在成都,成都的互联网格外的卷,如果是凭现在的简历的话很难找到大厂,建议再添加一个高质量的项目上去,另外专业技能的话最好是超过每一条的一半
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务