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

    LeetCode-46-全排列

    题目

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

    示例:

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

    思路

    这道题和上一道题39差不多的,连代码形式也是一样的;

    不一样的地方在于,38题不能往前搜索,而这道题不能重复,

    所以设置一个visit指针,后续通过new改为数组,用于保存数字是否选择过;

    代码

    class Solution {
    public:
        int numsLen;
        int *visit;
        vector<vector<int>> ans;
        void dfs(vector<int>& path, vector<int>& nums, int len) {
            if (len == numsLen) {
                ans.push_back(path);
                return;
            }
            for (int i=0; i<numsLen; i++) {
                if (visit[i] == 0) {
                    visit[i] = 1;
                    path.push_back(nums[i]);
                    dfs(path, nums, len+1);
                    visit[i] = 0;
                    path.pop_back();
                }
            }
        }
    
        vector<vector<int>> permute(vector<int>& nums) {
            numsLen = nums.size();
            if (numsLen <= 0) return ans;
    
            visit = new int[numsLen];
            memset(visit, 0, sizeof(int)*numsLen);
            vector<int> path;
            dfs(path, nums, 0);
            return ans;
        }
    };
    
  • 相关阅读:
    hbase
    spark-streaming
    spark-Scala
    经典台词二
    星爷电影经典台词一
    Hadoop第一阶段总结
    测试2
    POI 表格数据导出
    GC垃圾回收机制
    Java常见的200道面试题
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13449576.html
Copyright © 2011-2022 走看看