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

  • 相关阅读:
    跟我学Windows Azure 一 创建Windows Azure试用账号
    Dynamic编程
    多线程下的资源同步访问
    避免在同一机器上同时运行同一应用程序的多个实例
    依赖注入与Service Locator
    MVP演化论
    应用MVP模式对遗留代码进行重构
    对遗留代码的解依赖技术
    单元测试之测试方法
    单元测试之Mock
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer38-zi-fu-chuan-de-pai-lie.html
Copyright © 2011-2022 走看看