zoukankan      html  css  js  c++  java
  • 字符串的排列(剑指offer-27)

    题目描述

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
    输入描述:
    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    题目解析


    首先确定一个初始位置,然后通过递归去查找每一个位置的字符可能出现情况。比如说现在要找index下标位置的字符,那么体现在代码中就是交换index以及index位置之后的那些字符。

    题目解答

    import java.util.*;
    public class StringSort {
        public ArrayList<String> Permutation(String str) {
            char[] a = str.toCharArray();
            ArrayList<String> ans = new ArrayList<>();
            solve(ans,a,0,str.length());
            ans = new ArrayList<String>(new HashSet<String>(ans));//去重
            Collections.sort(ans);//字典排序 -> ans.sort(null);
            return ans;
        }
    
        private void solve(ArrayList<String> ans, char[] a, int index, int length) {//进行全排列
            if (index == length-1){//当前位置在字符串的最后
                String res = change(a);//将char转换成String类型的函数
                ans.add(res);
            }
            else{//现在要确定index位置的字符,将index与index以后的字符进行交换
                for (int i = index; i < length; i++) {
                    char tmp = a[i];
                    a[i] = a[index];
                    a[index] = tmp;
                    //当前index位置的字符已经通过交换找到,递归寻找下一个位置的字符
                    solve(ans,a,index+1,length);
                    //为了消除当前层去递归的时候的进行交换字符的影响,
                    //如果不消除的话,那么就会造成原index位置的字符发生变化
                    tmp = a[i];
                    a[i] = a[index];
                    a[index] = tmp;
                }
            }
        }
    
        private String change(char[] a) {//将char转换成String类型的函数
            StringBuilder res = new StringBuilder();
            for (char value:a
                 ) {
                    res.append(value
                    );
            }
            return res.toString();
    
        }
    }
    
    
  • 相关阅读:
    Eclipse上改动Jython代码的Comment颜色
    StaggeredGridView+universal-image-loader载入网路图片实现瀑布流
    HDU 1890 Robotic Sort
    overload和override
    FileStream大文件复制
    [Asp.Net]状态管理(Session、Application、Cache)
    c#简单自定义异常处理日志辅助类
    Socket网络编程(3)--两端通信
    [Asp.Net]状态管理(ViewState、Cookie)
    Socket网络编程(2)--服务端实现
  • 原文地址:https://www.cnblogs.com/yzhengy/p/13253164.html
Copyright © 2011-2022 走看看