您的位置:首页 > 其它

leetcode 4SUM

2014-09-28 10:56 295 查看
自己写的比较差的,时间过不去

#include <iostream>

#include <cstdlib>

#include <string>

#include <algorithm>

#include <vector>

#include <stack>

#include <queue>

#include <map>

#include <sstream>

using namespace std;

string ato_string(int value){

stringstream ss;

ss << value;

return ss.str();

}

void out (vector<int> v){

for(int i = 0; i < v.size(); i++){

cout<<v[i]<<" ";

}

cout<<endl;

}

vector<vector<int> > deep(vector<int> num, int target, int index){

if (index == 0 || num.size() < index)

{

vector<vector<int> > t;

return t;

}

vector<vector<int> > result;

for(int i = 0; i < num.size(); i++){

int tmp = num[i];

if (index == 1)

{

if (tmp == target)

{

vector<int> t;

t.push_back(tmp);

result.push_back(t);

}

continue;

}

vector<int> copy = num;

copy.erase(copy.begin() + i);

vector<vector<int> > re = deep(copy, target - tmp, index-1);

for (int j = 0; j < re.size(); ++j)

{

vector<int> t = re[j];

t.push_back(tmp);

result.push_back(t);

}

}

for(int i = 0; i < result.size(); i++){

sort(result[i].begin(), result[i].end());

}

return result;

}

vector<vector<int> > fourSum(vector<int> &num, int target) {

vector<vector<int> > r = deep(num, target, 4);

map<string, bool> m;

for(int i = 0 ; i != r.size(); ++i){

string key = ato_string(r[i][0]) + ato_string(r[i][1]) + ato_string(r[i][2]) + ato_string(r[i][3]);

if(m.find(key) != m.end()){

r.erase(r.begin()+i);

i--;

}else{

m[key] = true;

}

}

return r;

}

int main(int argc, char** argv) {

vector<int> s;

s.push_back(-9);

s.push_back(-2);

s.push_back(7);

s.push_back(6);

s.push_back(-8);

s.push_back(5);

s.push_back(8);

s.push_back(3);

s.push_back(-10);

s.push_back(-7);

s.push_back(8);

s.push_back(-8);

s.push_back(0);

s.push_back(0);

s.push_back(1);

s.push_back(-8);

s.push_back(7);

vector<vector<int> > r = fourSum(s,4);

for(int i = 0; i < r.size(); i++){

out(r[i]);

}

return 0
;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: