中级农民
- 积分
- 232
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-1-15
- 最后登录
- 1970-1-1
|
第四题先用递归找了一下, 怎么更好的解决?。。
- import java.util.Arrays;
- import java.util.LinkedList;
- import java.util.List;
- public class BeauArrange {
- public List<int[]> solution(int n){
- List<int[]> res = new LinkedList<>();
- int[] list = new int[n];
- if(n == 1){
- list[0] = 1;
- res.add(list);
- return(res);
- } else{
- List<int[]> temp = solution(n - 1);
- for(int[] t: temp){
- int[] tn = new int[n];
- for(int i = 0; i < n - 1; i++) tn[i] = t[i];
- tn[n - 1] = n;
- res.add(tn);
- for(int i = 0; i < n - 1; i++){
- int[] ttn = new int[n];
- for(int j = 0; j < n - 1; j++) ttn[j] = t[j];
- int curVal = t[i];
- if(n % (i + 1) == 0 && n % curVal == 0){
- ttn[i] = n;
- ttn[n - 1] = curVal;
- res.add(ttn);
- }
- }
- }
- return(res);
- }
- }
- public static void main(String[] args) {
- BeauArrange bu = new BeauArrange();
- List<int[]> blist = bu.solution(20);
- for(int[] tlist: blist){
- System.out.println(Arrays.toString(tlist));
- }
- System.out.println(blist.size());
- }
- }
复制代码 |
|