美文网首页
字符串的排列(全排列)——Java回溯法

字符串的排列(全排列)——Java回溯法

作者: Cuttstage | 来源:发表于2019-03-27 23:21 被阅读0次

题目描述

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

输入描述:

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

Solution:


20180619204217111.png

从这张图中,我们可以看出来,找全排列类似于深度优先遍历,深度优先最关键的就是要记住上一个状态,而所谓回溯就是要回到上一没有操作过的状态,再去考虑别的情况。

···
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ans=new ArrayList<>();//所有排列的可能都在这里
if(str!=null||str.length()>0){
help(0,str.toCharArray(),ans);
Collections.sort(ans);
}
return ans;
}
public static void help(int i,char[] cha,ArrayList<String> ans){
if(i==cha.length-1){
String val = String.valueOf(cha);
if(!ans.contains(val)){
ans.add(val);
}
}else{
for(int j=i;j<cha.length;j++){
swap(i,j,cha);//依次选一个数固定住
help(i+1,cha,ans);//让后面的进行全排列
swap(i,j,cha);//恢复原来的模样,回溯关键
}
}
}
public static void swap(int i,int j,char[] cha){
char temp=cha[i];
cha[i]=cha[j];
cha[j]=temp;
}
}
···

相关文章

  • 字符串的排列(全排列)——Java回溯法

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所...

  • 排列组合与回溯法

    排列,组合,回溯法 ex.1 ex.2 排列 全排列:从第一个数字起,每个数字分别与它后面的数字交换 去重全排列:...

  • 排列,组合,子集专题

    排列组合的题用回溯法和递归基本可以解决,总结一下。46.全排列 47.全排列II 47比46多了个序列可重复的条件...

  • 回溯--全排列

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • 回溯法解决全排列问题

    基本思想是不断的扩大排序的规模public class Solution{ public void permuta...

  • JavaScript - 全排列2(回溯法)

    给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1...

  • JavaScript - 全排列1(回溯法)

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [...

  • 回溯法(DFS)

    应用场景 回溯法的求解目标是找出解空间树中满足约束条件的所有解。 回溯实现全排列

  • 2022-02-15 1380. 矩阵中的幸运数

    送分题 java版本: 剑指offer 38:字符串的排列类似于全排列+支持相同字符Go版本:

  • Permutation 全排列

    递归解决全排列(回溯法) 回溯法的思路也不难理解。考察其如何递归,以1234为例。首先需要考虑第一位,可以以此与后...

网友评论

      本文标题:字符串的排列(全排列)——Java回溯法

      本文链接:https://www.haomeiwen.com/subject/xcixbqtx.html