zoukankan      html  css  js  c++  java
  • 剑指Offer28:字符串的排列(Java)

    总结 :

    • 主要考察全排列算法的实现

      一个数组把里面的每一个数轮流执行这个过程:把该值放在第一位,其余各个数做全排列;for(int j=i;j<arr.length;j++)
    • 用选择排序算法实现字符串字典排序(可不用自己写代码,直接用Collections.sort())

      字符串的按字典顺序比较大小使用compareTo()方法

    题目描述:

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

    输入描述:

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<String> Permutation(String str) {
           ArrayList<String> result =new ArrayList<String>();
           if(str==null) return result;
           char [] cha = str.toCharArray();
           PermutationCount(cha,0,result);
           Sort(result);                              //按照字典顺序给字符串排序
           return result;
        }
        
        public static void PermutationCount(char [] arr ,int i,ArrayList<String> list){
            if(i==arr.length-1){                      //递归结束条件,当指向最后一位数时,将字符串添加到ArrayList
                String item = String.valueOf(arr);    
               if(!list.contains(item))
                    list.add(item);
            }   
            else{
                for(int j=i;j<arr.length;j++){        //每次递归执行完后不是回到上一层,而是执行循环直到循环结束才返回上一层!!!。
                    swap(arr,i,j);                    //将每一个数都和第0位的数交换,其余的数执行下面的代码
                    PermutationCount(arr,i+1,list);   //剩余的数递归执行全排列
                    swap(arr,i,j);                    //这个数和第0位的数交换后还要还原回去
                }
            }
        }
        
        public static void swap(char [] arr,int i,int j){ //交换数组元素
            char temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        
        public static void Sort(ArrayList<String> res){  //选择排序把ArrayList里的字符串按字典顺序排序
            for(int i=0;i<res.size()-1;i++){
                int temp=i;
                int j;
                for(j=i+1;j<res.size();j++){
                    if(res.get(j).compareTo(res.get(temp))<0)//字符串的按字典顺序比较大小
                        temp=j;
                }
                String str=res.get(temp);
                res.set(temp,res.get(i));
                res.set(i,str);
            }
        }
    }
    
  • 相关阅读:
    python学习之列表
    python学习之数据类型
    开启python学习之路
    软件工程中的需求分析包括的主要内容
    论需求分析和数据库设计的重要性
    Android的ListView分页功能(上滑加载更多)
    设置ListView显示到最后一行
    一对一Socket简单聊天的实现
    Spring Cloud学习笔记-004
    Spring Cloud学习笔记-003
  • 原文地址:https://www.cnblogs.com/dongmm031/p/12049578.html
Copyright © 2011-2022 走看看