zoukankan      html  css  js  c++  java
  • 字符串的排列-剑指Offer

    字符串的排列

    题目描述

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

    输入描述

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

    思路

    1. 把字符串分成两部分,一部分是第一个字符,另一个部分是后面其余的字符串
    2. 拿第一个字符和后面的字符串依次交换,这是一个递归的过程
    3. 注意:在递归里第一次交换是自身和自身的交换,保证不缺少字符串

    代码

    import java.util.ArrayList;
    import java.util.Collections;
    public class Solution {
        public ArrayList<String> Permutation(String str) {
    		ArrayList<String> list = new ArrayList<String>();
    		if (str == null || str.length() == 0) {
    			return list;
    		}
    		char[] strArr = str.toCharArray();
    		permu(list, strArr, 0);
    		Collections.sort(list);
    		return list;
        }
    public void permu(ArrayList<String> list, char[] strArr, int start) {
    	if (start == strArr.length - 1) {
    		String result = String.valueOf(strArr);
    		if (list.indexOf(result) < 0) {
    			list.add(String.valueOf(strArr));
    		}
    	}
    	for (int i = start; i < strArr.length; i++) {
    		char temp = strArr[i];
    		strArr[i] = strArr[start];
    		strArr[start] = temp;
    		permu(list, strArr, start + 1);
    		temp = strArr[i];
    		strArr[i] = strArr[start];
    		strArr[start] = temp;
    	}
    	return;
    }
    }
  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/rosending/p/5631205.html
Copyright © 2011-2022 走看看