永发信息网

java动态规划 计算数n由k个数相加而成的情况数

答案:1  悬赏:10  手机版
解决时间 2021-03-14 01:47
  • 提问者网友:谁的错
  • 2021-03-13 14:00
定义MyClass类,实现其中的method(n,k)方法。方法用于计算数n由k个数相加而成的情况数。如6由2个数相加而成的情况有:1+5、2+4、3+3,所有此时方法应该返回3。
其中n限定在100以内(含),计算时间不能超过1秒钟。
注意:不要修改method方法的修饰符、返回类型、方法名和形参。
class MyClass {
public static int method(int n, int k) {
// 计算数n由k个数相加而成的情况数。
}
}

老师说用动态规划的方法做,但是还是没有思路,谢谢各位
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-03-13 15:34
public class MyClass {
    public static void main(String[] args) {
        System.out.println(">>> result count:" + method(6, 3));
    }
    public static int method(int n, int k) {
        List<List<Integer>> list = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            if (i == 0) {
                for (int j = 1; j < n; j++) {
                    List<Integer> li = new ArrayList<>();
                    li.add(j);
                    list.add(li);
                }
                continue;
            }
            List<List<Integer>> listNew = new ArrayList<>();
            for (List<Integer> integers : list) {
                for (int j = integers.get(integers.size() - 1); j < n; j++) {
                    List<Integer> li = new ArrayList<>();
                    li.addAll(integers);
                    li.add(j);
                    listNew.add(li);
                    if (i + 1 == k) {
                        int res = 0;
                        for (Integer integer : li) {
                            res += integer;
                        }
                        if (res != n) {
                            listNew.remove(li);
                        }
                    }
                }
            }
            list.clear();
            list.addAll(listNew);
        }
        for (List<Integer> integers : list) {
            for (Integer integer : integers) {
                System.out.print(integer + "\t");
            }
            System.out.println();
        }
        return list.size();
    }
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯