java 数字组合_java解决数字组合问题
問題描述:輸入1~9以內(nèi)的幾個數(shù)字,輸出這些數(shù)字的多重組合。
輸入:1,2,3
輸出:
1
2
3
12
13
23
123
問題分析:
當(dāng)輸入為
1
輸出
1
當(dāng)輸入為
1 ?2
輸出
1
2
12
當(dāng)輸入為
1 ?2 ?3
輸出
1
2
3
12
13
23
123
那么可以分析如下
當(dāng)輸入1 2 3 4時做了以下處理
把上面結(jié)果拷貝
1
2
3
12
13
23
123
1
2
3
12
13
23
123
然后在上面的基礎(chǔ)上加上4即結(jié)果為
1
2
3
12
13
23
123
1
2
3
12
13
23
123
4
然后接著在拷貝的后面部分加上4,結(jié)果為
1
2
3
12
13
23
123
14
24
34
124
134
234
1234
4
然后講以上數(shù)字排序輸出,就得到了輸入為[1 2 3 4] 時的結(jié)果。
在這個思路的基礎(chǔ)上可以想到用遞歸的方法來做只需要在上一步的基礎(chǔ)之上加上新的數(shù)字即可。實(shí)現(xiàn)代碼如下:
import java.util.ArrayList;
import java.util.Collections;
public class Number {
/*
* 遞歸函數(shù)的輸入函數(shù)有兩個,第一個表示輸入數(shù)組中第幾個數(shù)字,第二個表示輸入數(shù)組
* 由于動態(tài)數(shù)組可以靈活添加元素,因此使用了動態(tài)數(shù)組來存儲結(jié)果
*/
public static ArrayList foo(int i,int[]vec){
//遞歸結(jié)束的條件是讀到第一個元素之后返回該元素
if(i==0){
ArrayList list = new ArrayList();
list.add(vec[0]);
return list;
}
else{
//得到上一步的結(jié)果
ArrayList nlist = foo(i-1,vec);
int n = nlist.size();
int num = vec[i];
//把輸入數(shù)組中此處的元素添加進(jìn)動態(tài)數(shù)組
nlist.add(num);
//動態(tài)數(shù)組中的每一個元素將輸入數(shù)組中當(dāng)前元素放在個位之后追加到動態(tài)數(shù)組
for(int k=0;k
nlist.add(nlist.get(k)*10+num);
}
return nlist;
}
}
public static void main(String[] args) {
int[] vec = {1,2,3};
int l = vec.length;
ArrayList list = foo(l-1,vec);
Collections.sort(list);
for(int i:list){
System.out.println(i);
}
}
}
以上是我的解題思路,希望多多指教。
總結(jié)
以上是生活随笔為你收集整理的java 数字组合_java解决数字组合问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字语音信号处理学习笔记——语音信号的同
- 下一篇: 音量的计算