java 给定Ñ和S,从1〜n的之间多个数之和为小号的序列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 给定Ñ和S,从1〜n的之间多个数之和为小号的序列相关的知识,希望对你有一定的参考价值。
public static List<List<Integer>> sumToK(int n,int k){
//从1~n中取数,使其加和等于k
if(n<1) return result;
ArrayList<Integer> comp = new ArrayList<Integer>();
sumtok(1,n,k,comp);
return result;
}
public static void sumtok(int cur,int n,int k,List<Integer> comp){
if(k==0 && cur<=n+1){
ArrayList<Integer> r = new ArrayList<Integer>();
for(Integer c : comp) r.add(c);
result.add(r);
return;
} //这里的cur<n+1是因为有的边界值处于可行序列中而如果cur<n则导致该边界值加不进去
if(k<0 || cur>n) return; //这里不能是cur>n+1,否则有可能碰到bug。
comp.add(cur);
sumtok(cur+1,n,k-cur,comp);
comp.remove(comp.size()-1);
sumtok(cur+1,n,k,comp);
}
public static void sumToK(int n,int k){
//从1~n中取数,使其加和等于k
if(n<1) return;
ArrayList<Integer> comp = new ArrayList<Integer>();
sumtok(k,n,comp);
}
public static void sumtok(int sum,int n,List<Integer> comp){
if(n<=0 || sum<=0) return;
if(sum==n){
for(Integer c : comp) System.out.print(c+" ");
System.out.print(sum+" ");
System.out.println("\n");
return;
}
comp.add(n);
sumtok(sum-n,n-1,comp);
comp.remove(comp.size()-1);
sumtok(sum,n-1,comp);
}
//答案不对,缺少某些序列
以上是关于java 给定Ñ和S,从1〜n的之间多个数之和为小号的序列的主要内容,如果未能解决你的问题,请参考以下文章
209-长度最小的子数组
209. 长度最小的子数组
leetcode-209-长度最小的子数组
LeetCode#209-长度最小的子数组
209. 长度最小的子数组
LeetCode:长度最小的子数组209