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;
    }
  • 相关阅读:
    Form组件
    LAMP+Varnish的实现
    缓存反向代理-Varnish
    CDN初识
    HTTP缓存初探
    Keepalived搭建主从架构、主主架构实例
    实现高可用-Keepalived
    nginx负载均衡实例
    lvs集群实现lvs-dr模型和lvs-nat模型
    LVS介绍
  • 原文地址:https://www.cnblogs.com/biat/p/10667051.html
Copyright © 2011-2022 走看看