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

    最直观的想法就是 长度为n的数组   第一个位置有n个选择,第二个有n-1,第三个有n-2.....所有的为n!

    可以用一个数组来记录,每次记录完后清空,但不如直接在原数组上操作 

    递归到深度为长度-1即可,因为倒数第二个安排好以后最后一个也没得选择了。

    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ans;
        backtracking(nums, 0, ans);
        return ans;
    }
    // 辅函数
    void backtracking(vector<int> &nums, int level, vector<vector<int>> &ans) {
        if (level == nums.size() - 1) {
            ans.push_back(nums);
            return;
        }
        for (int i = level; i < nums.size(); i++) {
            swap(nums[i], nums[level]); // 修改当前节点状态
            backtracking(nums, level+1, ans); // 递归子节点
            swap(nums[i], nums[level]); // 回改当前节点状态
         }
      }
    };        
    每天进步一点点~
  • 相关阅读:
    将execel表格的数据导入到mysql数据库
    清明听雨
    h5调用底层接口的一些知识
    微信小程序从零开始开发步骤(一)搭建开发环境
    Matplotlib
    Numpy
    pandas
    6 MapReduce的理解
    静态链表
    单链表
  • 原文地址:https://www.cnblogs.com/libin123/p/14658751.html
Copyright © 2011-2022 走看看