题解 | #字符串的排列#

字符串的排列

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

遇到排列组合问题,一般使用回溯法求解。

回溯法模板:

result = {}
 void backtrack(路径, 选择列表):
    if (满足结束条件){
        result.add(路径)
        return
    }
    for (选择 in 选择列表){
        做选择
        backtrack(路径, 选择列表)
        撤销选择
    }
import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        HashSet<String> ans = new HashSet<>();
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < str.length(); i++) {
            list.add(str.charAt(i));
        }
        backtrack(list,0,str.length(), ans);
        return new ArrayList<>(ans);
    }

    public void backtrack(List<Character> list, int start, int end, HashSet<String> ans) {
        if (start == end) {
            // 收集结果
            String str = "";
            for (int i = 0; i < list.size(); i++) {
                str += list.get(i);
            }
            ans.add(str);
        }
        for (int i = start; i < end; i++) {
            Collections.swap(list, i, start);
            backtrack(list, start + 1, end, ans);
            Collections.swap(list, i, start);
        }
    }
}
全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务