题解 | #字符串的排列#

字符串的排列

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

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-11 13:34
门头沟学院 C++
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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