LeetCode 46 全排列
由于自己很笨,前期想了好久,结果一查大神的思路,一个stl就解决了。。。。
- 首先定义一个char类型的数组,要把数字转化为字符才能进行字典排序。
- 百度查了一下
next_permutation()
的用法,这个函数是按照字典序产生排列的,并且是从数组中当前的字典序开始依次增大直至到最大字典序,它的返回值是一个bool类型,表示,如果有下一个字典排列就返回true否则就返回false。- 由于要先添加元素,再去判断,因为判断之后就进入下一个排列序了,所以要用
do...while
循环- 注意外层要用sort排好序
源代码:
class Solution {
private:
vector<vector<int> > results;
public:
void permutation(char *str,int length){
sort(str,str+length);
int i;
do{
vector<int> path;
for(i=0;i<length;i++){
path.push_back(str[i] - '0');
}
results.push_back(path);
}while(next_permutation(str,str+length));
}
vector<vector<int>> permute(vector<int>& nums) {
int i;
char str_tmp[10000];
for(i=0;i<nums.size();i++){
str_tmp[i] = nums[i] + '0';
}
permutation(str_tmp,nums.size());
return results;
}
};