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