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

    题目描述:

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

    题目分析:

    最简单的是使用字典序生成法,这样可以把有重复字符串的情况也考虑进去。

    Java实现代码:

    import java.util.ArrayList;
    import java.util.Arrays;
    public class Solution {
        
        private ArrayList<String> res = new ArrayList<String>();
        
        public ArrayList<String> Permutation(String str) {
            int len = str.length();
            if(len == 0) return res;
            if(len == 1) {res.add(str); return res; }
            
            char [] seq = str.toCharArray();
            Arrays.sort(seq);
            res.add(String.valueOf(seq));
          
            while(true){
              int k = len-1; 
              
              while(k>=1 && seq[k-1]>=seq[k]){
                  k--;
              }
              if(k == 0) break;
              k--;
             
              int l = k + 1;
              while(l<len && seq[l] > seq[k]){
                  l++;
              }
              l--;
              swap(seq, k,l);
              reverse(seq, k+1);
              res.add(String.valueOf(seq));
                
            }
            
            return res;
           
        }
        
        
        public void reverse(char[] seq, int start){
            int len = seq.length;
            if(len == 0) return;
            
            for(int i=0; i< (len-start)>>1; ++i){
                int p = start + i;
                int q = len - i-1;
                if(p == q) return;
                swap(seq, p, q);
                
            }
            
        }
        
        public void swap(char[] seq, int a, int b){
            char temp = seq[a];
            seq[a] = seq[b];
            seq[b] = temp;
        }
    }
    技进乎艺,艺进乎道
  • 相关阅读:
    hdu 3790 最短路径问题
    hdu 2112 HDU Today
    最短路问题 以hdu1874为例
    hdu 1690 Bus System Floyd
    hdu 2066 一个人的旅行
    hdu 2680 Choose the best route
    hdu 1596 find the safest road
    hdu 1869 六度分离
    hdu 3339 In Action
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/weekend/p/7128444.html
Copyright © 2011-2022 走看看