首页 > 编程知识 正文

string数据库,string数据库官网

时间:2023-05-06 19:41:49 阅读:236214 作者:887

问题:

段位:4

说明:

输入一个字符串,然后将穷举下非重复排序序列字符串,返回一个list。

输入案例:

// 它弄了个类来输入一个string,然后后面那个就列出所有非重复排序序列。Permutations.singlePermutations("a") `shouldBe` ["a"]Permutations.singlePermutations("ab") `shouldBe` ["ab", "ba"]Permutations.singlePermutations("aabb") `shouldBe` ["aabb","abab","abba","baab","baba","bbaa"] 我的代码:

抄了别人思路,利用递归的分治方法(递归学完之后几个处理方法全忘了,就像二分那几个模板),然后递归中循环。

数学方面这个就是一个阶乘的概念,有多少种组合方法,然后我处理出来之后,拿个hashset去重就行(对,我叫他hash去重)

 

class Permutations { // 利用builder做数组拼接 private static StringBuilder builder = new StringBuilder(); // 寄存输入string长度 private static int len = -1; public static List<String> singlePermutations(String s) { // 判下空 List<String> res = new ArrayList<String>(); if(s == null || s.length() == 0) return res; // 进行递归循环处理,hashset去重(我去面试说"hash去重"面试官就会打我) len = s.length(); HashSet<String> set = new HashSet<String>(); recurtion(s, new boolean[s.length()], builder, set); res = new ArrayList<String>(set); return res; } public static void recurtion(String s, boolean[] used, StringBuilder builder, HashSet<String> res) { // 判断是否拼接完成,不然进入循环 if(builder.length() == s.length()) { res.add(builder.toString()); return; } // 进行循环拼接,并且子序列递归 for(int i = 0;i < len;i++) { if(!used[i]) { used[i] = true; builder.append(s.charAt(i)); recurtion(s, used, builder, res); // 下一个子序列处理,需要把stringbuilder末位减去 if(builder.length() != 0) builder.deleteCharAt(builder.length() - 1); used[i] = false; } } }}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。