就是如果是abc 就有abc abc bac bca cab cba6 这个忘了叫什么。感觉固定下来不太安逸,就写了一个字符串的排列
搞了许久才实现了效果,不知道行不得行,大神们给给意见
[Java] 纯文本查看 复制代码 public static void main(String[] args) {
getStringPaiLie("qwer");
}
public static void getStringPaiLie(String s) {
// 需要判断字符串内的元素是否唯一
char chs[] = s.toCharArray();
if (checkArrayRepeat(chs)) {
System.out.println("字符串元素不唯一");
return;
}
int len = chs.length;
tempChars = new char[len];
xunhuan(chs, 0);
System.out.println(slist.size());
System.out.println(slist);
}
/**
* 添加队列字符串到数组
* @param chs
* @param index 数组索引
*
*/
public static void xunhuan(char chs[], int index) {
for (int i = 0; i < chs.length; i++) {
//每进入一重循环,记录到静态数组中。也可以传个数组过来 第一个循环体就是tempChar(0)
tempChars[index] = chs[i];
//如果没到最里面的循环,就递归下去,记录每一层的值 tempChar(i) 递归时索引+1,tempChar(1)=第二重循环的i值
if (index != chs.length - 1) {
xunhuan(chs, index + 1);
}
//递归到最里面的循坏,开始写代码 如果tempChar里面有重复的,就什么都不干继续循环
if (index == chs.length - 1) {
if (checkArrayRepeat(tempChars))
continue;
//如果数组无重复值,就把他变成字符串存起来
slist.add(new String(tempChars));
}
}
}
/**
* 简单的判断字符数组里有无重复元素
* @param c
* @return 有重复 true 无重复 false
*/
private static boolean checkArrayRepeat(char[] c) {
for (int i = 0; i < c.length; i++) {
for (int j = i + 1; j < c.length; j++) {
if (c[i] == c[j]) {
return true;
}
}
}
return false;
}
|