zoukankan      html  css  js  c++  java
  • 【Offer】[38] 【字符串的排列】

    题目描述

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

    牛客网刷题地址

    思路分析

      将字符串看成两部分,第一部分为第一个位置的字符,第二部分为剩下的字符,那么,要求这个字符串的操作就可以分为两步:
      1. 求第一部分可能出现在第一个位置的字符,即第一个字符和其后面的所有字符交换
      2. 求后面字符的排列,这就又回到了原来的问题。可以利用递归。

    测试用例

    1. 功能测试:输入的字符串中有一个或者多个字符。
    2. 特殊输入测试:输入的字符串的内容为空或者nullptr指针。

    Java代码

    public class Offer38 {
        public static void main(String[] args) {
            test1();
            test2();
            test3();
            
        }
    
        public ArrayList<String> Permutation(String str) {
            return Solution1(str);
        }
    
        private static ArrayList<String> Solution1(String str) {
            ArrayList<String> list = new ArrayList<String>();
            if(str==null || str.length()==0){
                return list;
            }
            permutationCore(str.toCharArray(),0,list);
            Collections.sort(list);
            return list;
        }
        
         private static void permutationCore(char[] array,int index,ArrayList<String> list){
                if(index == array.length-1){
                    if(!list.contains(String.valueOf(array))){
                        list.add(String.valueOf(array));
                    }
                }else{
                    for(int i=index;i<array.length;i++){
                        char tmp = array[index];
                        array[index] = array[i];
                        array[i] = tmp;
                        permutationCore(array,index+1,list);
                        array[i]=array[index];
                        array[index] = tmp;   
                    }
                }
            }
    
        private static void test1() {
    
        }
    
        private static void test2() {
    
        }
        private static void test3() {
    
        }
    
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    第六次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业 计科一班程晨
    第一次作业 计科一班程晨
    第七次作业
    第五次作业
    第四次作业
    第三次作业
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer38-zi-fu-chuan-de-pai-lie.html
Copyright © 2011-2022 走看看