对1,2,3,4,5进行组合,写一个Java函数实现所有组合方式

今天的一道面试题,下面是代码,如果有更好的写法,欢迎分享;

package com.suanfa;

import java.util.ArrayList;

public class Combination {
        public void f(int[] arr) {
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]+"");
            }
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr.length;j++){
                    if(i!=j){
                        System.out.println(arr[i]+""+arr[j]+"");
                    }
                }
            }
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr.length;j++){
                    for(int k=0;k<arr.length;k++){
                        if(i!=j && j!=k && i!=k){
                            System.out.println(arr[i]+""+arr[j]+""+arr[k]);
                        }
                    }
                }
            }
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr.length;j++){
                    for(int k=0;k<arr.length;k++){
                        for(int l=0;l<arr.length;l++){
                                if(i!=j && i!=k && i!=l && j!=k && j!=l && k!=l){
                                    System.out.println(arr[i]+""+arr[j]+""+arr[k]+""+arr[l]);
                                }
                        }
                    }
                }
            }
            for(int i=0;i<arr.length;i++){
                for(int j=0;j<arr.length;j++){
                    for(int k=0;k<arr.length;k++){
                        for(int l=0;l<arr.length;l++){
                            for(int m=0;m<arr.length;m++){
                                if(i!=j && i!=k && i!=l && i!=m && j!=k && j!=l && j!=m && k!=l && k!=m && l!=m){
                                    System.out.println(arr[i]+""+arr[j]+""+arr[k]+""+arr[l]+""+arr[m]);
                                }
                            }
                        }
                    }
                }
            }
        }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        Combination combination = new Combination();
        combination.f(arr);
    }

}

测试结果如下:
1
2
3
4
5
12
13
14
15
21
23
24
25
31
32
34
35
41
42
43
45
51
52
53
54
123
124
125
132
134
135
142
143
145
152
153
154
213
214
215
231
234
235
241
243
245
251
253
254
312
314
315
321
324
325
341
342
345
351
352
354
412
413
415
421
423
425
431
432
435
451
452
453
512
513
514
521
523
524
531
532
534
541
542
543
1234
1235
1243
1245
1253
1254
1324
1325
1342
1345
1352
1354
1423
1425
1432
1435
1452
1453
1523
1524
1532
1534
1542
1543
2134
2135
2143
2145
2153
2154
2314
2315
2341
2345
2351
2354
2413
2415
2431
2435
2451
2453
2513
2514
2531
2534
2541
2543
3124
3125
3142
3145
3152
3154
3214
3215
3241
3245
3251
3254
3412
3415
3421
3425
3451
3452
3512
3514
3521
3524
3541
3542
4123
4125
4132
4135
4152
4153
4213
4215
4231
4235
4251
4253
4312
4315
4321
4325
4351
4352
4512
4513
4521
4523
4531
4532
5123
5124
5132
5134
5142
5143
5213
5214
5231
5234
5241
5243
5312
5314
5321
5324
5341
5342
5412
5413
5421
5423
5431
5432
12345
12354
12435
12453
12534
12543
13245
13254
13425
13452
13524
13542
14235
14253
14325
14352
14523
14532
15234
15243
15324
15342
15423
15432
21345
21354
21435
21453
21534
21543
23145
23154
23415
23451
23514
23541
24135
24153
24315
24351
24513
24531
25134
25143
25314
25341
25413
25431
31245
31254
31425
31452
31524
31542
32145
32154
32415
32451
32514
32541
34125
34152
34215
34251
34512
34521
35124
35142
35214
35241
35412
35421
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Java语言以DFS算法一个求排列组合函数的示例代码: ```java public class PermutationCombination { /** * 求n个元素中取m个元素的组合数 * * @param n 元素总数 * @param m 取出元素个数 * @return 组合数 */ public static int combination(int n, int m) { if (n < m) { return 0; } if (n == m || m == 0) { return 1; } return combination(n - 1, m - 1) + combination(n - 1, m); } /** * 求n个元素的全排列 * * @param nums 元素数组 * @return 全排列列表 */ public static List<List<Integer>> permutation(int[] nums) { List<List<Integer>> res = new ArrayList<>(); if (nums == null || nums.length == 0) { return res; } boolean[] visited = new boolean[nums.length]; dfs(nums, visited, new ArrayList<Integer>(), res); return res; } /** * DFS遍历求全排列 * * @param nums 元素数组 * @param visited 标记已访问的元素 * @param currList 当前已选元素列表 * @param res 全排列列表 */ private static void dfs(int[] nums, boolean[] visited, List<Integer> currList, List<List<Integer>> res) { if (currList.size() == nums.length) { res.add(new ArrayList<>(currList)); return; } for (int i = 0; i < nums.length; i++) { if (!visited[i]) { visited[i] = true; currList.add(nums[i]); dfs(nums, visited, currList, res); visited[i] = false; currList.remove(currList.size() - 1); } } } } ``` 该代码中包含了两个函数,一个是求组合数的函数`combination`,另一个是求全排列的函数`permutation`。 在`combination`函数中,我们使用递归的方式来求解组合数,根据组合数的定义,我们可以分为两种情况来递归求解。一种是从n-1个元素中取m-1个元素,另一种是从n-1个元素中取m个元素,两种情况之和即为所求的组合数。 在`permutation`函数中,我们使用DFS算法来求解全排列。我们首先将数组`nums`中的所有元素都标记为未访问状态,然后从第一个元素开始进行深度优先遍历。在遍历过程中,我们将当前元素加入已选元素列表`currList`中,并将该元素标记为已访问状态。然后递归遍历下一个元素,直到`currList`中包含了所有元素,此时将`currList`添加到结果列表`res`中。最后,我们需要将当前元素从`currList`中移除,并将该元素标记为未访问状态,以便下一次遍历时可以再次使用该元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值