给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
搜索回溯的框架题
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]
这道题的话是搜索回溯的一道简单习题吧,我都是按照搜索回溯的最简单的框架套进去的,但是这里的话搜索回溯我只会套框架,后面有空的时候要再去想想仔细看下搜索回溯的一些基础知识点,以及运行的时候是怎么执行的吧。
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xvqup5/
class Solution { public: vector<vector<int>> arranges; vector<int> vis; vector<int> arrange; void dfs(int step,vector<int>& nums){ for(int i=0;i<nums.size();i++){ if(vis[i]==0){ arrange[step]=nums[i]; vis[i]=1; if(step==nums.size()-1){ arranges.push_back(arrange); }else{ dfs(step+1,nums); } vis[i]=0; } } } vector<vector<int>> permute(vector<int>& nums) { for(int i=0;i<nums.size();i++){ vis.push_back(0); arrange.push_back(nums[i]); } dfs(0,nums); return arranges; } };
这道习题是我本来以为我可能做不出来,只是就硬着头皮试一下,没想到真的能写出来的一道题,我觉得在刷题的时候,一定不要去先纠结正确答案以及正确解法,就用自己现在已经掌握的所有知识点,去一点点的尝试,一点点去做,说真的,基础的框架这些都掌握了,我刚开始做这道题的时候想着的是,我不会做,这道题和我之前做的习题都不一样,所以我可能需要看答案,本来是想着放下不做的,但是后来的时候想了下,我有什么再需要去复习掌握的呢,是回溯框架不会写还是说回溯的题没做过,不过是换了种形式就放弃了吗,这样也不好吧,这是自己尝试去做的第一遍,抛开答案去做题吧,慢慢来总是会越来越好的,第一遍就浪费些时间不要看答案吧。
今天也是不怎么开心的一天,不过不开心的理由吧,不能说,好了就这样吧,各人有各人的无可奈何,也要尊重客观事实的嘛。如果下次有机会,心里是善意的,表面上就一定要表达自己的善意。珍惜眼前珍惜当下哦,活在当下就好了,我已经够幸运了,多余的就不要奢望了吧。