全排列

枚举所有可能的排列:通过递归选择未使用的元素加入当前路径,完成选择后回溯

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ans;  
        vector<int> path;      
        vector<bool> used(nums.size(), false); 
        backtrack(nums, ans, path, used);    
        return ans;  
    }

    void backtrack(vector<int>& nums, vector<vector<int>>& ans, vector<int>& path, vector<bool>& used) {
        if (path.size() == nums.size()) {
            ans.push_back(path); 
            return;               
        }

        // 遍历所有元素,尝试将未选中的元素加入当前路径
        for (int i = 0; i < nums.size(); i++) {
            if (used[i]) {        
                continue;
            }
            // 将当前元素加入路径,并标记为已使用
            path.push_back(nums[i]);
            used[i] = true;
            // 继续构建下一个位置的元素
            backtrack(nums, ans, path, used);
            // 回溯
            path.pop_back();
            used[i] = false;
        }
    }
};

全部评论

相关推荐

12-14 22:54
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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