【字符串】字符串的全排列

题目描述:

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。


输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。


我的代码:

import java.util.ArrayList;
import java.util.TreeSet;

public class Main {
	/**
	 * 求字符串的全排列
	 * @param str 输入的字符串
	 * @return 返回包含所有的字符串的全排列的结果集合,并按照字典顺序排序
	 */
	public static ArrayList<String> Permutation(String str) {
		char[] data = str.toCharArray();
		ArrayList<String> result = new ArrayList<String>();
		Permutation(data, 0, result);
		//去重,排序
		TreeSet<String> set = new TreeSet<String>();
		set.addAll(result);
		result.clear();
		result.addAll(set);
		return result;
	}

	/**
	 * @param data 字符串转化成的字符数组
	 * @param beginIndex 起始位置
	 * @param result 包含所有的字符串的全排列的结果集合
	 */
	public static void Permutation(char[] data, int beginIndex, ArrayList<String> result) {
		//如果已经交换到最后一位,那么将这个字符串添加进结果集合
		if (beginIndex == data.length - 1) {
			result.add(new String(data));
		} else {
			for (int i = beginIndex; i < data.length; i++) {
				// 重复的话不交换
				if (i != beginIndex && data[i] == data[beginIndex])
					continue;
				//交换
				char temp = data[beginIndex];
				data[beginIndex] = data[i];
				data[i] = temp;
				
				//递归
				Permutation(data, beginIndex + 1, result);

				//再换回来
				temp = data[beginIndex];
				data[beginIndex] = data[i];
				data[i] = temp;
			}
		}
	}
}


本题需要注意的地方:

    首先是这种求字符串全排列的递归方法,要学习一下,之后去重和排序的话直接用TreeSet解决。

    需要掌握的一个地方,是List和Set之间的相互转换可以直接用addAll函数来转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值