zoukankan      html  css  js  c++  java
  • leetcode 46. 全排列

    思路

    深度优先遍历:回溯,递归(终止条件:选择的当前数字数量等于原始数组的大小)

    状态变量
    1.递归到第几层,depth
    2.已经选择了哪些数Path
    3.布尔数组 used
    非叶子节点选择分枝

    代码:

    class Solution {
    public:
        void backtrack(vector<vector<int>>&res,vector<int>&output,int first,int len)
        {
            if (first == len)//递归出口  所有数都填完了
            {
                res.emplace_back(output);
                //return; //什么操作都不做
            }
            //循环
            for(int i = first;i<len;++i)
            {
                //维护动态数组
                swap(output[i],output[first]);
                //继续递归填下一个数
                backtrack(res,output,first+1,len);
                //撤销操作
                swap(output[i],output[first]); //撤销交换  回退到上一个分支
            }
        }
        vector<vector<int>> permute(vector<int>& nums) {
            vector<vector<int>>res;
            backtrack(res,nums,0,(int)nums.size());
            return res;
        }
    };

    调用STL的结果

    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
            vector<vector<int>>result;
            sort(nums.begin(),nums.end());
            do{
                result.push_back(nums);
            }while(next_permutation(nums.begin(),nums.end()));
           return  result;
        }
    };
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    Django终端打印SQL语句
    Django之缓存
    Django总结三
    Django之信号
    Django之Form的ModelForm
    git下
    Ajax实现文件的上传
    operator模块
    Django之Form自定义验证规则
    New Concept English Two 32 88
  • 原文地址:https://www.cnblogs.com/gcter/p/15338528.html
Copyright © 2011-2022 走看看