Skip to content

Commit ca294d1

Browse files
committed
16, 17
1 parent 6c514ce commit ca294d1

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

16_3sum_closest.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include "test.h"
2+
3+
4+
class Solution {
5+
public:
6+
int abs(int a)
7+
{
8+
return a < 0 ? -a : a;
9+
}
10+
int threeSumClosest(vector<int>& nums, int target)
11+
{
12+
if (nums.size() < 3)
13+
return 0;
14+
15+
auto ret = nums[0] + nums[1] + nums[2];
16+
if (nums.size() == 3)
17+
return ret;
18+
19+
sort(nums.begin(), nums.end());
20+
21+
auto i = 0u;
22+
while (i < nums.size() - 2)
23+
{
24+
auto j = i + 1;
25+
auto k = nums.size() - 1;
26+
while (j < k)
27+
{
28+
auto tmp = nums[i] + nums[j] + nums[k];
29+
30+
auto oldDist = ret - target;
31+
auto dist = tmp - target;
32+
33+
if (abs(oldDist) > abs(dist))
34+
ret = tmp;
35+
36+
if (dist == 0)
37+
return tmp;
38+
39+
dist > 0 ? --k : ++j;
40+
}
41+
42+
if (nums[i] > target)
43+
return ret;
44+
45+
++i;
46+
}
47+
return ret;
48+
}
49+
};
50+
51+
52+
53+
int main()
54+
{
55+
vector<tuple<vector<int>, int>> datas =
56+
{
57+
//{{1,1,1,0},100},
58+
{{0,2,1,-3}, 1},
59+
};
60+
Solution s;
61+
for (auto& data : datas)
62+
cout << s.threeSumClosest(std::get<0>(data), std::get<1>(data)) << endl;
63+
return 0;
64+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include "test.h"
2+
3+
4+
class Solution {
5+
public:
6+
vector<string> letterCombinations(string digits)
7+
{
8+
vector<string> ret;
9+
if (digits.empty())
10+
return ret;
11+
12+
std::vector<std::vector<std::string>> digit2chars =
13+
{
14+
{"a", "b", "c"},
15+
{"d", "e", "f"},
16+
{"g", "h", "i"},
17+
{"j", "k", "l"},
18+
{"m", "n", "o"},
19+
{"p", "q", "r", "s"},
20+
{"t", "u", "v"},
21+
{"w", "x", "y", "z"},
22+
};
23+
24+
ret.push_back("");
25+
26+
for (auto i = 0u; i < digits.size(); ++i)
27+
{
28+
vector<string> newRet;
29+
auto items = digit2chars[digits[i] - '2'];
30+
for (auto r : ret)
31+
for (auto item : items)
32+
newRet.push_back(r + item);
33+
ret = newRet;
34+
}
35+
return ret;
36+
}
37+
};
38+
39+
static int x = []()
40+
{
41+
std::ios::sync_with_stdio(false);
42+
cin.tie(nullptr);
43+
return 0;
44+
}();
45+
46+
int main()
47+
{
48+
vector<string> datas =
49+
{
50+
"23",
51+
};
52+
Solution s;
53+
for (auto& data : datas)
54+
cout << s.letterCombinations(data) << endl;
55+
return 0;
56+
}

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ targets = \
1414
13_roman_to_integer.exec\
1515
14_longest_common_prefix.exec\
1616
15_3_sum.exec\
17+
16_3sum_closest.exec\
18+
17_letter_ombinations_of_a_phone_number.exec\
1719
502_ipo.exec\
1820

1921

0 commit comments

Comments
 (0)