剑指offer--字符串的排列

来源:互联网 发布:网络用语开屏什么意思 编辑:程序博客网 时间:2024/06/09 19:48
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:

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


全排列的题还是写了好几道了。用dfs和递归的;

康托展开式的 


这道题,长度不超过9 dfs 还是可以写;

和链接里稍微的区别是,这里有重复字符,所以要用arrays.contain判断一下;然后字典输出;

import java.util.ArrayList;public class Solution {    ArrayList<String> result = new ArrayList<>();    public ArrayList<String> Permutation(String str) {        if (str.equals("")) {return result;}        char[] strtochar = str.toCharArray();    char[] save = new char[strtochar.length];    boolean[] visit = new boolean[strtochar.length];    int num = 0;    dfs(strtochar, visit, num,save);    return result;    }            /*让save[]遍历strtochar[]的每一个字符,*/private void dfs(char[] strtochar, boolean[] visit, int num, char[] save) {if (num==strtochar.length) {String temp = String.copyValueOf(save);if (!result.contains(temp)) {result.add(temp);}return;}for (int i = 0; i < strtochar.length; i++) {if (!visit[i]) {visit[i]=true;save[num] = strtochar[i];num++;dfs(strtochar, visit, num, save);num--;save[num]=' ';visit[i]=false;}}}}