|
给定不同整数的数组,打印数组的所有排列。
( a8 M2 X- N& ^, g+ A6 x: ?例如:& k/ m/ U* Z N- t* ^8 m/ v- O
array Permuations are :[10,20,30] [10,30,20] [20,10,30] [20,30,10,10] [30,10,20]
# x* L& e6 I- F; S4 N 解决方案: 7 I) F) R4 ^' Z) J" S
我们可以用递归来解决问题。递归很难解释,所以我创建了一棵递归树来展示它。: x6 d$ M |2 D/ X" j) S/ |8 I
这是相同的代码。& u2 ^, w$ u; N1 I* y7 p, w" o
package org.arpit.java2blog;import java.util.ArrayList;import java.util.List;public class PermutateArray public static void main(String[] args) PermutateArray pa=new PermutateArray();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;int[] arr= List permute = pa.permute(arr); System.out.println("ermuations of array are:"); System.out.println("========================================="); for(List[I] perm:permute) System.out.println(perm); public List permute(int[] arr) List list = new ArrayList();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;permuteHelper(list,new ArrayList(),arr); return list; } private void permuteHelper(List list,List[I] resultList,int [] arr) Base case if(resultList.size() == arr.length) list.add(new ArrayList(resultList)); } else for(int i = 0; i 当您操作上述程序时,您将获得以下输出:
. x) }; {- R X) H% i5 T( Z. cPermuations of array are:=========================================[10、20、30] [10、30、20] [20、10、30] [20、30、10、10] [30、10、20] [30、20、10]我已经用下图解释了递归是如何在这里工作的。
I+ {8 h& M X
! k0 C; X& O. N: v- G, I* Z 7 {1 ~( B, V+ h' E, P. j+ w
您需要在新窗口打开图表并缩放。) J1 |& \0 U. ^
因为数组中有 3个元素,所以每个节点都有 3个分支。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|