• 【剑指offer28:字符串的排列】【java】


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

    import java.util.ArrayList;
    import java.util.Arrays;
    
    /**
     * Created by Fay on 2018/2/26.
     */
    public class leetcode28 {
        ArrayList<String> list = new ArrayList<String>();
    
        public ArrayList<String> Permutation(String str) {
            if(str == null){
                return null;
            }
            char[] arr = str.toCharArray();
            recursionArrange(arr,0,arr.length-1);
            return list;
        }
    
        public void recursionArrange(char[] arr ,int start, int end){
    
            if(start == end){
                String str = String.valueOf(arr);
                list.add(str);
            }else{
                for(int i=start; i<=end; i++){
                    //如果碰到相同的字母,则不做交换,跳过本次循环(首字母除外,会有一次交换)
                    if(i!=start && arr[start]==arr[i]){
                        continue;
                    }else{
                        swap(arr, i, start);
                        recursionArrange(arr, start+1, end);
                        swap(arr, i ,start);
                    }
    
                }
            }
    
        }
    
        public void swap(char[] arr,int m,int n){
            char temp = arr[m];
            arr[m] = arr[n];
            arr[n] = temp;
        }
    
        public static void main(String args[]){
           leetcode28 test = new leetcode28();
           ArrayList<String> list = test.Permutation("aba");
           for(String str:list){
               System.out.println(str);
           }
        }
    }

    这里有一个地方很奇怪,如果是做递归交换的话,每次交换完之后会恢复原样,那么对于abc来说,最后两个应该是cab和cba的顺序,为何牛客网测试给出了相反的顺序?是否有人可以回答一下~

     
  • 相关阅读:
    数据库之小问题
    网络基础
    react-fiber 解析
    【like-react】手写一个类似 react 的框架
    istat menus 序列号
    Git学习
    JavaScript设计模式与开发实践【第一部分】
    javascript 原生bind方法实现
    requirejs 学习
    mac 安装maven+eclipse
  • 原文地址:https://www.cnblogs.com/fay0926/p/8482240.html
Copyright © 2020-2023  润新知