(已解答)请大佬帮做个题目

刚刚东方财富的题目,感觉可以用回溯,但是没做出来,有哪位同学帮忙写一下,万分感谢!

_________________________________________________________________________
更新一下,东方财富的原题还有第三个参数k,即返回所有组合中的第k项(组合按照数字大小排序,如果第一个数字相同,就使用第二个排序,一次类推)
如果没有第k项,则返回-1。我自己的代码如下,感觉还有可以优化的地方,请大佬指点!
public class solution2 {
    static List<List<Integer>> res = new ArrayList<>();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int n = in.nextInt();
        int k = in.nextInt();
        backtrack(N, n, 1, new Stack<>());
        if (k > res.size()) {
            System.out.println(-1);
            return;
        }
        List<Integer> list = res.get(k - 1);
        int count = 0;
        for (Integer integer : list) {
            System.out.print(integer);
            if (count != n - 1) {
                System.out.print(" ");
            }
        }
    }

    private static void backtrack(int target, int n, int start, Stack<Integer> track) {
        if (sum(track) == target && track.size() == n) {
            res.add(new ArrayList<>(track));
            return;
        }
        if (track.size() == n) return;

        for (int i = start; i <= 10; i++) {
            track.add(i);
            backtrack(target, n, start + 1, track);
            track.pop();
        }
    }

    private static int sum(Stack<Integer> trace) {
        int sum = 0;
        ArrayList<Integer> list = new ArrayList<>(trace);
        for (Integer integer : list) {
            sum += integer;
        }
        return sum;
    }
}


#东方财富#
全部评论
Leetcode39 组合总和
点赞 回复 分享
发布于 2020-08-25 20:25

相关推荐

牛客鼠:校友你这简历基本无敌了,春招刷刷题去冲大厂
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客企业服务