字符串全排列
字符串全排列
哭哭吓唬你 发表于4年前
字符串全排列
  • 发表于 4年前
  • 阅读 26
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。然后可以将123的第二个数和每三个数交换得到132。同理可以根据213和321来得231和312。因此可以知道——全排列就是从第一个数字起每个数分别与它后面的数字交换。找到这个规律后,递归的代码就很容易写出来了:
public class StringPermutation {

	/**
	 * 方法名称:main()
	 * 方法描述:
	 * @param  
	 * @return String    
	 * @Exception 
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		char[] ch = "aba".toCharArray();
		permutation(ch, 0);
	}
	
	private static boolean isSwap(char[] s, int begin, int end){
		
		for(int i=begin;i<end;i++){
			if(s[i] == s[end]){
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 方法名称:permutation()
	 * 方法描述:index:当前第几个数, size:共有多少个数
	 * @param  
	 * @return String    
	 * @Exception 
	 */
	public static void permutation(char[] s, int index){
		if(index >= s.length){
			System.out.println(new String (s));
		}else{
			//begin 与其后面的字符进行交换
			for(int i=index;i<s.length;i++){
				if(isSwap(s, index, i)){
					swap(s, index, i);
					permutation(s, index+1);
					swap(s, index, i);
					
				}
			}
		}
	}
	
	public static void swap(char[] s,int i, int j){
		char temp = s[i];
		s[i] = s[j];
		s[j] = temp;
	}

}
参考:http://blog.csdn.net/hackbuteer1/article/details/7462447
 



共有 人打赏支持
粉丝 4
博文 90
码字总数 38290
×
哭哭吓唬你
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: