A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就是如果是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;
	}

1 个回复

倒序浏览
还有2个静态属性
        static ArrayList<String> slist = new ArrayList<String>();
        static char tempChars[] = null;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马