题解 | #没有重复项数字的全排列#

没有重复项数字的全排列

https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1

思路

index 位置以后的数字都有机会来到 index 位置,递归求出所有可能的情况

CODE

import java.util.*;
public class Solution {
    ArrayList> res = new ArrayList();
    public ArrayList> permute(int[] num) {
        ArrayList list = new ArrayList();
        process(num,  0, num.length, list);
        return res;
    }

    // nums[...index] 表示index之前已经做过选择,nums[index ...]表示index以后的位置可以来到index位置
    private void process(int[] nums, int index, int N, ArrayList list) {
        if (index == N) {
            res.add(new ArrayList(list));
            return;
        }

        for (int i = index; i < N; i++) {
            swap(nums, index, i);        // 表明包含 index 以及 index 以后的数有机会来到 index 位置
            list.add(nums[index]);       // 将当前index位置的元素加入到list中
            process(nums, index + 1, N, list);        // 下一个位置的可能情况
            list.remove(list.size() - 1);    // 恢复现场
            swap(nums, index, i);        // 恢复现场
        }
    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
#算法题#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务