java 循环移位输出全排列

 //题目:利用1、2、2、3、4这4个数字,用java写一个main函数打印出所有不同的排列,如12234,,2234等,要求打印出来不能有重复
1
package test123; 2 3 import java.util.Arrays; 4 5 public class test123 { 6 public static int count = 0; 7 public static void main(String[] args) { 8 String s = "1223"; 9 String s2 = "1232"; 10 int t = 1&0; 11 System.out.println(t); 12 13 int index[] = new int[s.length()]; 14 for (int i = 0; i < s2.length(); i++) { 15 index[i] = s2.indexOf(s2.charAt(i)); 16 } 17 //System.out.print(Arrays.toString(index) ); 18 Pailie(s, ""); 19 } 20 static void Pailie(String s, String p){ 21 if (s.length() < 1) { 22 count++; 23 System.out.println(s+p); 24 } 25 else{ 26 int index[] = new int[s.length()]; 27 for (int i = 0; i < s.length(); i++) { 28 index[i] = s.indexOf(s.charAt(i)); 29 } 30 //System.out.print(Arrays.toString(index) ); 31 for (int i = 0; i < s.length(); i++) { 32 if(i == index[i]){ 33 Pailie(s.substring(1), p+s.substring(0, 1)); 34 } 35 s = s.substring(1) + s.substring(0, 1); 36 } 37 } 38 } 39 }

循环移位提取前缀,将后缀进行全排列,如果有重复的数字,只提取一次前缀,因为前缀是一样的,则后缀的排列也是一样的,就会有重复的排列输出。

假设 s = "1234", 没有重复的数字:

posted @ 2014-01-04 10:37  soul390  阅读(528)  评论(0)    收藏  举报