题解 | 字符串的排列

字符串的排列

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

import java.util.*;
import java.util.stream.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return string字符串ArrayList
     */
    public static ArrayList<String> Permutation(String str) {
        Set<String> sets = new HashSet<>();
        char[] marks = new char[str.length()];  // 标记已经添加过的
        // LinkedList 用于缓存,也可以用栈
        LinkedList<Character> list = new LinkedList<>();
        combNum(sets, marks, list, str.toCharArray());

        return new ArrayList<>(sets);
    }

    // 递归方式组合
    public static void combNum(Set<String> sets, char[] marks
							   , LinkedList<Character> list, char[] arr) {
        if (list.size() == arr.length) {
            sets.add(list.stream().map(String::valueOf).collect(Collectors.joining()));
            return;
        }

        for (int i = 0; i < arr.length; i++) {
            if (marks[i] == 1) { // 排除已经添加的
                continue;
            }
            list.add(arr[i]);
            marks[i] = 1;

            combNum(sets, marks, list, arr); // 递归继续寻找

            list.removeLast(); // 移除已经参加过所有排列的数字
            marks[i] = 0;
        }
    }
}

全部评论

相关推荐

让资本家给我当牛做马:26的秋招还没开始啊?你找的是实习?实习的话你马上就研三了为什么还要实习?
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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