46. 全排列

2021/7/11 23:10:08

本文主要是介绍46. 全排列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 题目描述
  • 代码

题目描述

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

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

代码

class Solution {
public:
    vector<vector<int> > permute(vector<int> &num) {
    	
      vector<vector<int>> ret;
    	permuteCore(num,0,ret);
    	return ret;       
    }

    void permuteCore(vector<int> &num,int index,vector<vector<int>> &ret)
    {
    	if(index == num.size())
    	{ //这里利用了原数组存放结果排列的临时结果
    		ret.push_back(num);
    		return;
    	}

    	else
    	{ 
        //枚举遍历每个位置各个不同的情况
        //这里使用了原数组作为候选值集合,对于当前位置index,index之前的已经
        //用过了,因此要从index开始枚举候选元素
    		for(int i = index;i<num.size();i++)
    		{
    			swap(num[index],num[i]);
    			permuteCore(num,index+1,ret);
    			swap(num[index],num[i]);
    		}
    	}
    }
};


这篇关于46. 全排列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程