题解 | #字符串的排列#

字符串的排列

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);
        }
    }
}
全部评论

相关推荐

10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:其实简历是不需要事无巨细的写的,让对方知道你有这段经历就行了,最重要的是面试的时候讲细讲明白
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务