zoukankan      html  css  js  c++  java
  • 字符串的排列

    题目描述

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

    这个题思路不难,大致思路是

    把第一个字母看做一部分,后面的所有字母看做一部分。用第一个字母和后面的所有字母依次交换,每交换一次把后一部分的字符串执行相应的操作。执行完之后,再把这一层刚刚换了的两个字母换回来,再用第一个和后面部分的下一个互换,反复执行

    注意:可是这个有一个步骤是需要互换的,这个就很烦,最开始想到了用数组,后来感觉输出还要转成string存进ArrayList类型变量中,就放弃了。准备用Stringbuffer类的设置某一的索引位的字符,可是对java的类库不熟。。。本地测试成功了,可是在线oj一直不行。

    于是看了大家的讨论,发现原来 new string(参数这里可以传入字符类型的数组),简直太方便了,以前还各种循环拼起来。 这样的话就用数组做,也不麻烦。

    还需要注意一点就是万一原字符串是  aab类似的,这样包看会不会重复,可以用arraylist的contains的方法判断

    代码参考来自 牛课网 老石基

    import java.util.*;
    public class Solution {
        public ArrayList<String> Permutation(String str) {
            ArrayList<String> result = new ArrayList<String>();
            if(str==null||str.length()==0)
                return result;
            char[] c = str.toCharArray();
            Permutation(result, c, 0, c.length);
            Collections.sort(result);
            return result;
        }
     
        public void Permutation(ArrayList<String> list,char[] c, int star,int end){
            if(star==end-1){
                String result = new String(c);
                if(!list.contains(result))
                    list.add(result);
                return;
            }
            //交換
            for(int i = star;i<end;i++){
                char temp = c[star];
                char temp2 = c[i];
                c[star] = temp2;
                c[i] = temp;
                Permutation(list,c,star+1,end);
                c[star] = temp;
                c[i] = temp2;
            }
        }
    }
  • 相关阅读:
    Node Sass version 5.0.0 is incompatible with^4.0.0
    Vue v-html 的使用
    SQL 判断时间是否为空
    Element UI 表单验证
    Mybatis-Plus根据条件更新
    语法检查工具 http://jshint.com/
    安装node_modules文件遇到的问题:更改代理
    知识点3: 学习中遇到的问题
    Vue: 用 key 管理可复用的元素
    Vue遇到的问题
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5907771.html
Copyright © 2011-2022 走看看