Skip to content

Commit 44f4363

Browse files
committed
leetcode
1 parent de88567 commit 44f4363

3 files changed

Lines changed: 177 additions & 0 deletions

File tree

LeetCode/fourSum.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <iostream>
2+
#include <climits>
3+
#include <algorithm>
4+
#include <string>
5+
#include <cstring>
6+
#include <vector>
7+
using namespace std;
8+
9+
#define REP(i,n) for(int i=0;i<(n);++i)
10+
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
11+
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
12+
typedef long long LL;
13+
14+
class Solution {
15+
public:
16+
vector<vector<int> > fourSum(vector<int> &num, int target) {
17+
sort(num.begin(), num.end());
18+
vector<vector<int> > ret;
19+
int n = num.size();
20+
REP(i,n) {
21+
if (i != 0 && num[i] == num[i - 1]) continue;
22+
FOR(j,i+1,n-1) {
23+
if (j != i + 1 && num[j] == num[j - 1]) continue;
24+
int s = num[i] + num[j];
25+
int lt = j + 1;
26+
int rt = n - 1;
27+
while (lt < rt) {
28+
if (num[lt] + num[rt] + s == target) {
29+
vector<int> tmp;
30+
tmp.push_back(num[i]);
31+
tmp.push_back(num[j]);
32+
tmp.push_back(num[lt]);
33+
tmp.push_back(num[rt]);
34+
ret.push_back(tmp);
35+
++lt;
36+
--rt;
37+
} else if (num[lt] + num[rt] + s < target) {
38+
++lt;
39+
} else {
40+
--rt;
41+
}
42+
}
43+
}
44+
}
45+
ret.erase(unique(ret.begin(), ret.end()), ret.end());
46+
return ret;
47+
}
48+
};
49+
50+
int main() {
51+
Solution s = Solution();
52+
int data[] = {1, 0, -1, 0, -2, 2};
53+
vector<int> mm;
54+
int sz = sizeof(data) / sizeof(int);
55+
REP(i,sz) mm.push_back(data[i]);
56+
vector<vector<int> > ret = s.fourSum(mm, 0);
57+
REP(i,ret.size()) {
58+
REP(j,ret[i].size()) {
59+
cout << ret[i][j] << " ";
60+
}
61+
cout << endl;
62+
}
63+
return 0;
64+
}

LeetCode/letterCombinations.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <iostream>
2+
#include <climits>
3+
#include <algorithm>
4+
#include <string>
5+
#include <cstring>
6+
#include <vector>
7+
#include <map>
8+
using namespace std;
9+
10+
#define REP(i,n) for(int i=0;i<(n);++i)
11+
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
12+
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
13+
typedef long long LL;
14+
15+
class Solution {
16+
public:
17+
string str, s;
18+
int len;
19+
vector<string> ret;
20+
map<char, string> mp;
21+
22+
void dfs(int idx) {
23+
if (idx == len) {
24+
ret.push_back(s);
25+
return;
26+
}
27+
28+
string t = mp[str[idx]];
29+
REP(i,t.length()) {
30+
s[idx] = t[i];
31+
dfs(idx + 1);
32+
}
33+
}
34+
35+
vector<string> letterCombinations(string digits) {
36+
mp['0'] = "0";
37+
mp['1'] = "1";
38+
mp['2'] = "abc";
39+
mp['3'] = "def";
40+
mp['4'] = "ghi";
41+
mp['5'] = "jkl";
42+
mp['6'] = "mno";
43+
mp['7'] = "pqrs";
44+
mp['8'] = "tuv";
45+
mp['9'] = "wxyz";
46+
s = str = digits;
47+
len = str.length();
48+
ret.clear();
49+
dfs(0);
50+
return ret;
51+
}
52+
};
53+
54+
int main() {
55+
Solution s = Solution();
56+
vector<string> mm = s.letterCombinations("23");
57+
REP(i,mm.size()) {
58+
cout << mm[i] << endl;
59+
}
60+
return 0;
61+
}

LeetCode/threeSumClosest.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include <iostream>
2+
#include <climits>
3+
#include <algorithm>
4+
#include <string>
5+
#include <cstring>
6+
#include <vector>
7+
using namespace std;
8+
9+
#define REP(i,n) for(int i=0;i<(n);++i)
10+
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
11+
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
12+
typedef long long LL;
13+
14+
class Solution {
15+
public:
16+
int threeSumClosest(vector<int> &num, int target) {
17+
sort(num.begin(), num.end());
18+
int ret = num[0] + num[1] + num[2];
19+
int d = abs(ret - target);
20+
int n = num.size();
21+
REP(i,n) {
22+
if (i != 0 && num[i] == num[i - 1]) continue;
23+
int lt = i + 1;
24+
int rt = n - 1;
25+
while (lt < rt) {
26+
int s = num[i] + num[lt] + num[rt];
27+
if (s == target) {
28+
return s;
29+
} else {
30+
if (abs(s - target) < d) {
31+
ret = s;
32+
d = abs(s - target);
33+
}
34+
if (s < target) ++lt;
35+
else --rt;
36+
}
37+
}
38+
}
39+
return ret;
40+
}
41+
};
42+
43+
int main() {
44+
Solution s = Solution();
45+
int data[] = {-1, 2, 1, -4};
46+
vector<int> mm;
47+
int sz = sizeof(data) / sizeof(int);
48+
REP(i,sz) mm.push_back(data[i]);
49+
int ret = s.threeSumClosest(mm, 1);
50+
cout << ret << endl;
51+
return 0;
52+
}

0 commit comments

Comments
 (0)