【剑指offer】面试题38:字符串的排列(Java)
輸入一個字符串,打印出該字符串中字符的所有排列。
?
你可以以任意順序返回這個字符串?dāng)?shù)組,但里面不能有重復(fù)元素。
?
示例:
輸入:s = "abc"
輸出:["abc","acb","bac","bca","cab","cba"]
?
限制:
1 <= s 的長度 <= 8
代碼:
class?Solution?{
????public?String[]?permutation(String?s)?{
????????List<String>?result?=?new?ArrayList<>();
????????boolean?visited[]?=?new?boolean[s.length()];
????????char?arr[]?=?s.toCharArray();
????????Arrays.sort(arr);
????????StringBuilder?x?=?new?StringBuilder();
????????helper(result,visited,arr,x);
????????String?res[]?=?new?String[result.size()];
????????for(int?i=0;i<result.size();i++){
????????????res[i]?=?result.get(i);
????????}
????????return?res;
????}
????public?void?helper(List<String>?result,boolean?visited[],char?arr[],StringBuilder?x){
????????if(x.length()==arr.length){
????????????result.add(x.toString());
????????????return;
????????}
????????for(int?i=0;i<arr.length;i++){
????????????if(i!=0&&arr[i]==arr[i-1]&&visited[i-1])?continue;
????????????if(!visited[i]){
????????????????x.append(arr[i]);
????????????????visited[i]?=?true;
????????????????helper(result,visited,arr,x);
????????????????x.deleteCharAt(x.length()-1);
????????????????visited[i]?=?false;
????????????}
????????}
????}
}
總結(jié)
以上是生活随笔為你收集整理的【剑指offer】面试题38:字符串的排列(Java)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js正则检测输入内容为数字,包括负数,整
- 下一篇: Leetcode--438. 找到字符串