小于等于n的正整数相加等于m的一个算法问题
面试碰到的题,数据结构,算法什么的早忘干净了,没答上来。。。
大神看下这样做行不?
好像用什么动态规划算法挺做的,那个还没看,有会的大神帮个忙啊
/*
* 有集合N={1,2,3……,n},求a1+a2+……+an=m(ai属于N不等于0,i=1,2,……n)的所有组合,m,n都是自然数
*/
public static void func1(int n, int m, int k, int door){
if(n>m) n = m;
if(m==1&&m>=k){
System.out.println("1");
return;
}else if(n==1){
if(m<=door)
System.out.println(m);
return;
}else {
int i = 0;
while(n*i<=m){
if(i>=k){
if(i>0)
System.out.print(i+"+");
func1(n-1,m-i,i,door);
}
i++;
}
}
}
public static void main(String[] args) {
func1(6,6,0,6);
}