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

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。

    示例:

    输入: [1,2,3]
    输出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]

    思路:这里没有重复数字。不能重复使用数字。回溯算法。

    1.visit数组来记住是否被访问过。

    2.一个trace数组用来记录访问的顺序。

    3.结束条件:trace数组的个数等于原数组个数。

    class Solution {
    public:
        vector<vector<int>> permuteUnique(vector<int>& nums) {
      //     set<vector<int>> va;
           vector<int> trace;
            vector<vector<int>> va1;
            vector<int> visited(nums.size(),0);
           permuteUnique(va1,trace,nums,visited);
          
       
           return va1; 
        }
        void permuteUnique(vector<vector<int>> &va,vector<int> &trace,vector<int> &nums,vector<int> &visited)
        {
            if(nums.size()==trace.size())
            {
                va.push_back(trace);
            }
            for(int i=0;i<nums.size();i++)
            {
                if(visited[i]==1) continue;
                visited[i]=1;
                trace.push_back(nums[i]);
                permuteUnique(va,trace,nums,visited);
                trace.pop_back();
                visited[i]=0;
            }
        }
    };
  • 相关阅读:
    学习日报
    阅读笔记2
    学习日报
    记账本开发7
    记账本开发6
    学习日报
    记账本开发5
    今日总结
    今日总结
    家庭记账本7
  • 原文地址:https://www.cnblogs.com/buzhidao1/p/12709228.html
Copyright © 2011-2022 走看看