zoukankan      html  css  js  c++  java
  • #leetcode刷题之路46-全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列。
    示例:
    输入: [1,2,3]
    输出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]

    两种方法,第一种用了STL中的函数,第二种用递归+回溯,我个人很喜欢第二种方法

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    //vector<vector<int>> permute(vector<int>& nums) {
    //    sort(nums.begin(), nums.end());
    //    vector<vector<int>> a;
    //    do {
    //        a.push_back(nums);
    //    } while (std::next_permutation(nums.begin(), nums.end()));
    //    return a;
    //}
    
    void backtracking(vector<int>& nums,int start,vector<int> &temp,vector<vector<int>> &ans) {
    
        if (!nums.size()) return;
        if (start>=nums.size())
        {
            ans.push_back(temp);
            return;
        }
        for (int i=start; i<nums.size();i++)
        {
            swap(nums[i],nums[start]);
            temp.push_back(nums[start]);
            backtracking(nums, start+1, temp,ans);// 递归求解
            temp.pop_back();//回溯,不影响此次的循环
            swap(nums[i], nums[start]);//回溯不影响此次的循环
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> ans;
        vector<int> curSeq;
        backtracking(nums, 0, curSeq,ans);
        return ans;
    }
    
    int main() {
        vector<int> nums={1,2,3};
        int ans=permute(nums).size();
        std::cout << ans << std::endl;
        return 0;
    }
  • 相关阅读:
    液晶显示器分辨设置,显示器分辨率设置……
    如何显示语言栏
    查看一键Ghost的备份文件
    百度空间的变迁
    CentOS U盘安装
    Linux服务器系统选择
    博客一夜回到解放前
    spark常见的transformation和action算子
    二分查找
    9:两个栈实现一个队列
  • 原文地址:https://www.cnblogs.com/biat/p/10667051.html
Copyright © 2011-2022 走看看