Leetcode 上的一道算法题
#include
#include
using namespace std;
class Solution {
public:
vector > permute(vector nums) {
vector > rt;
rt = permu_dfs(nums, 0, rt);
//cout<< rt.size()<< endl;
return rt;
}
vector<vector<int> > permu_dfs(vector<int>& nums, int start, vector<vector<int> > input){
if(start == nums.size() - 1){
input.push_back(nums);
return input;
}
for(int i = start; i < nums.size(); i++){
swap(nums[i], nums[start]);
permu_dfs(nums, start + 1, input);
swap(nums[i], nums[start]);
}
}
};
int main(){
vector a{1,2};
Solution s;
vector > rt;
rt = s.permute(a);
cout<< rt.size()<< endl;
return 0;
}
运行时报错:
*** Error in `./a.out': double free or corruption (out): 0x0000000000400ad0 ***
Aborted (core dumped)
之前同样的代码还报过munmap_chunk(): invalid pointer, 不知道这回报的为啥不一样。。
试过permu_dfs函数rt传参数用引用,返回值改成void,问题解决了,但一直没搞明白这代码问题出哪了。
1.可以通过输出一些位置标志来确认问题出在哪里。
2.贴的代码要全部按照代码的格式贴出来,才能看清你的代码,现在这样贴,很多缺漏、错误,因此无法看清你的代码的具体问题
应该是下标越界了,查查 start + 1 传入函数后是否可能大于 vector 的维数吧
#include
#include
using namespace std;
class Solution {
public:
vector > permute(vector nums) {
vector > rt;
rt = permu_dfs(nums, 0, rt);
//cout<< rt.size()<< endl;
cout<< 'c'<<endl;
return rt;
}
vector<vector<int> > permu_dfs(vector<int>& nums, int start, vector<vector<int> >& input){
if(start == nums.size() - 1){
cout<< 'a'<<endl;
input.push_back(nums);
return input;
}
for(int i = start; i < nums.size(); i++){
swap(nums[i], nums[start]);
permu_dfs(nums, start + 1, input);
cout<< 'b'<<endl;
swap(nums[i], nums[start]);
}
}
};
int main(){
vector a{1,2};
Solution s;
vector > rt;
rt = s.permute(a);
//cout<< rt.size()<< endl;
return 0;
}