欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 46. 全排列

46. 全排列

2025/4/24 13:33:13 来源:https://blog.csdn.net/2301_80761149/article/details/147464744  浏览:    关键词:46. 全排列

题目

给定一个不含重复数字的数组 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]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

思路

        这道题我们需要通过不断尝试所有可能的组合,发现这个组合不满足条件或者已经排列完毕时,就返回上一步,接着尝试其他的可能性。从数组的第一个位置开始,把每个元素放到这个位置上,然后递归地处理数组的下一个位置,把剩下的元素放到这个位置。所有位置都被填满时,就得到了一个完整的排列。每次递归调用结束后,还要恢复数组的原来的样子,这样才能接着尝试其他的排列组合。

代码

class Solution {
public:void hs(vector<vector<int>>& res,vector<int>& r,int f,int l){//res是结果,r是现在的排列数组,f是当前位置,l是数组长度if(f==l)//已经有了一个完整的排列{res.emplace_back(r);return;}for(int i=f;i<l;i++){swap(r[i],r[f]);//交换i和first的位置hs(res,r,f+1,l);//处理下一个位置swap(r[i],r[f]);//恢复原来的顺序}}vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> res;hs(res,nums,0,(int)nums.size());return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词