46. 全排列

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路:

        两个要点:

                1.使用used数组标记用过的,这个used是竖向的,之前的是横向的。因为是竖向,所以需要传参进去并且回溯。横向的不需要传参进去,作用域只在当前(一层for)函数里。

                2.不需要index,因为横向需要重复选取。for循环里i都从0开始

46. 全排列_第1张图片代码:

class Solution {
public:
    vector> result;
    vector path;
    vector> permute(vector& nums) {
        vector used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
    void backtracking(vector& nums, vector& used)
    {
        if(path.size() == nums.size())
        {
            result.push_back(path);
            return;
        }
        for(int i = 0; i < nums.size(); i++)
        {
            if(used[i] == true) continue;
            used[i] = true;
            path.push_back(nums[i]);
            backtracking(nums, used);
            path.pop_back();
            used[i] = false;//used需要回溯
        }
    }
};

你可能感兴趣的:(leetcode,leetcode,算法)