您的位置:首页 > 编程语言 > Java开发

有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻

2013-03-01 22:03 537 查看
之前面试的时候做过这个题目,当时用了很笨的穷举法,今天在网上看到了一个感觉比较高级的递归法,学习一下。不过话说算法复杂度不一定比穷举法低。以下是原文(略有修改)。

其实在这个问题上看似很简单,但是对数组和字符处理不够熟练,就会显的很麻烦.

import java.util.ArrayList;
import java.util.List;

public class Permutation {

public static List<String> permutation = new ArrayList<String>();

public static void main(String[] args) {
char[] numbers = new char[]{'1','2','2','3','4','5'};
permute(numbers, 0, numbers.length-1);
for(String str:permutation){
System.out.println(str);
}
}

private static void permute(char[] n, int cur, int end) {
if(cur == end){
String str = new String(n);
if(permutation.contains(str)||str.charAt(2)=='4'||str.contains("35")
||str.contains("53"))
return;
permutation.add(str);
return;
}
for(int i=cur; i<=end; i++){
swap(n, cur, i);
permute(n, cur+1, end);
swap(n, cur, i);
}
}

private static void swap(char[] n, int cur, int i) {
char temp = n[cur];
n[cur] = n[i];
n[i] = temp;
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 全排列 算法
相关文章推荐