剑指offer-27-字符串的排列
字符串的排列_牛客网
https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13&tqId=11180&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
没想到按照自己的思路又攻克下了一道题目,在这道题目书写的过程中又进一步复习了java中String以及StringBuilder的用法
总体的解决思路是:
假设输入为a、b、c
那么其实排序的总数:
fun(a,b,c)=a(fun(b,c))+ a和b交换(fun(a,c))+a和c交换(fun(b,a))
fun(b,c) = b+fun(c)+b和c交换(fun(b))
fun(c)=1
所以用递归的方法就可以了,并且在这个递归的过程中,并没有做出一些浪费运行时间的事情,每一个递归都会产生新的结果,因此用递归来解决被称为动态规划的此题,是合理的。
另外题目中说明可能存在重复的字符,因此在进行交换的时候需要判断进行交换的字符是否相等,如果相等就没有必要交换了。
import java.util.ArrayList; public class Solution { public ArrayList<String> PermutationHelp(StringBuilder str){ ArrayList<String> result = new ArrayList<String>(); if(str.length() == 1)result.add(str.toString()); else{ for(int i = 0; i < str.length(); i++){ if(i== 0 || str.charAt(i) != str.charAt(0)){ char temp = str.charAt(i); str.setCharAt(i, str.charAt(0)); str.setCharAt(0, temp);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
小白刷剑指offer 文章被收录于专栏
跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~