定义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个数相加而成的情况数。
}
}
老师说用动态规划的方法做,但是还是没有思路,谢谢各位
java动态规划 计算数n由k个数相加而成的情况数
答案:1 悬赏:10 手机版
解决时间 2021-03-14 01:47
- 提问者网友:谁的错
- 2021-03-13 14:00
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 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();
}
}
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();
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯