Skip to content

Commit dc6cb1b

Browse files
committed
before 4.12
1 parent e0876a9 commit dc6cb1b

14 files changed

+518
-0
lines changed

15-3sum.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> threeSum(vector<int>& nums) {
4+
int i, j, k, m;
5+
int length = nums.size();
6+
int temp;
7+
vector<vector<int>> ans;
8+
9+
if(length == 0){
10+
return ans;
11+
}
12+
sort(nums.begin(), nums.end());
13+
if(nums.front() > 0 || nums.back() < 0){
14+
return ans;
15+
}
16+
for(i = 0; i < length - 2; i++){
17+
if(i > 0 && nums[i - 1] == nums[i]){
18+
continue;
19+
}
20+
for(j = i + 1, k = length - 1; j < k; ){
21+
if(nums[i] + nums[j] + nums[k] == 0){
22+
vector<int> temp;
23+
temp.push_back(nums[i]);
24+
temp.push_back(nums[j]);
25+
temp.push_back(nums[k]);
26+
ans.push_back(temp);
27+
j++;
28+
while(j < k && nums[j] == nums[j - 1]){
29+
j++;
30+
}
31+
k--;
32+
while(j < k && nums[k] == nums[k + 1]){
33+
k--;
34+
}
35+
}
36+
else if(nums[i] + nums[j] + nums[k] < 0){
37+
j++;
38+
}
39+
else{
40+
k--;
41+
}
42+
}
43+
}
44+
return ans;
45+
}
46+
};
47+

22-Generate-Parentheses.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<string> ans;
4+
void generator(string str, int left, int right){
5+
if(left == 0 && right == 0){
6+
ans.push_back(str);
7+
return ;
8+
}
9+
if(left > 0){
10+
generator(str + '(', left - 1, right);
11+
}
12+
if(right > 0 && left < right){
13+
generator(str + ')', left, right - 1);
14+
}
15+
}
16+
vector<string> generateParenthesis(int n) {
17+
string str = "";
18+
19+
generator(str, n, n);
20+
return ans;
21+
}
22+
};
23+

31-Next-Permutation.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
3+
void nextPermutation(vector<int>& nums) {
4+
vector<int>::iterator iter;
5+
vector<int>::reverse_iterator riter;
6+
int i;
7+
for(i = nums.size() - 1; i > 0; i--){
8+
if(nums[i] > nums[i - 1]){
9+
break;
10+
}
11+
}
12+
if(i == 0){
13+
reverse(nums.begin(), nums.end());
14+
}
15+
else{
16+
int temp = nums[i - 1];
17+
for(riter = nums.rbegin(); ; riter++){
18+
if(*riter > temp){
19+
nums[i - 1] = *riter;
20+
*riter = temp;
21+
reverse(nums.begin() + i, nums.end());
22+
break;
23+
}
24+
}
25+
}
26+
}
27+
};
28+

33-Search-in-Rotated-Sorted-Array.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
public:
3+
int search(vector<int>& nums, int target) {
4+
int length = nums.size();
5+
if(length == 0){
6+
return -1;
7+
}
8+
if(nums.front() <= target){
9+
for(int i = 0; i < length; i++){
10+
if(nums[i] == target){
11+
return i;
12+
}
13+
if(i != length - 1 && nums[i] > nums[i + 1]){
14+
return -1;
15+
}
16+
if(nums[i] > target){
17+
return -1;
18+
}
19+
}
20+
}
21+
if(nums.back() >= target){
22+
for(int i = length - 1; i >= 0; i--){
23+
if(nums[i] == target){
24+
return i;
25+
}
26+
if(i != 0 && nums[i] < nums[i - 1]){
27+
return -1;
28+
}
29+
if(nums[i] < target){
30+
return -1;
31+
}
32+
}
33+
}
34+
return -1;
35+
}
36+
};
37+

34-Search-for-a-Range.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
class Solution {
2+
public:
3+
vector<int> searchRange(vector<int>& nums, int target) {
4+
int i, j, mid, start, end, length = nums.size();
5+
vector<int> ans;
6+
7+
for(i = 0, j = length - 1; i <= j; ){
8+
mid = (i + j) / 2;
9+
if(nums[mid] == target){
10+
if(mid == 0 || i == j){
11+
start = mid;
12+
break;
13+
}
14+
else{
15+
if(nums[mid - 1] == target){
16+
j = mid - 1;
17+
}
18+
else{
19+
start = mid;
20+
break;
21+
}
22+
}
23+
}
24+
else if(nums[mid] > target){
25+
j = mid - 1;
26+
}
27+
else{
28+
i = mid + 1;
29+
}
30+
}
31+
if(i > j){
32+
return vector<int>(2, -1);
33+
}
34+
for(i = 0, j = length - 1; i <= j; ){
35+
mid = (i + j) / 2;
36+
if(nums[mid] == target){
37+
if(mid == length - 1 || i == j){
38+
end = mid;
39+
break;
40+
}
41+
else{
42+
if(nums[mid + 1] == target){
43+
i = mid + 1;
44+
}
45+
else{
46+
end = mid;
47+
break;
48+
}
49+
}
50+
}
51+
else if(nums[mid] > target){
52+
j = mid - 1;
53+
}
54+
else{
55+
i = mid + 1;
56+
}
57+
}
58+
if(i > j){
59+
return vector<int>(2, -1);
60+
}
61+
ans.push_back(start);
62+
ans.push_back(end);
63+
return ans;
64+
}
65+
};
66+

39-Combination-Sum.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> ans;
4+
vector<int> res;
5+
void combination(vector<int> &candidates, int target){
6+
if(target == 0){
7+
ans.push_back(vector<int>(res.begin(), res.end()));
8+
return ;
9+
}
10+
for(vector<int>::iterator iter = candidates.begin(); iter < candidates.end(); iter++){
11+
if(!res.empty() && *iter < res.back()){
12+
continue;
13+
}
14+
if(target - *iter >= 0){
15+
res.push_back(*iter);
16+
combination(candidates, target - *iter);
17+
res.pop_back();
18+
}
19+
else{
20+
return;
21+
}
22+
}
23+
}
24+
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
25+
sort(candidates.begin(), candidates.end());
26+
combination(candidates, target);
27+
return ans;
28+
}
29+
};
30+

40-Combination-Sum-II.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public:
3+
vector<int> res;
4+
vector<vector<int>> ans;
5+
set<vector<int>> hashset;
6+
void combination(vector<int>& candidates, const vector<int>::iterator &current_iter, int target){
7+
if(target == 0){
8+
vector<int> temp(res.begin(), res.end());
9+
if(hashset.find(temp) == hashset.end()){
10+
hashset.insert(temp);
11+
ans.push_back(temp);
12+
}
13+
return ;
14+
}
15+
for(vector<int>::iterator iter = current_iter; iter != candidates.end(); iter++){
16+
if(target - *iter >= 0){
17+
res.push_back(*iter);
18+
combination(candidates, iter + 1, target - *iter);
19+
res.pop_back();
20+
}
21+
else{
22+
return ;
23+
}
24+
}
25+
}
26+
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
27+
sort(candidates.begin(), candidates.end());
28+
combination(candidates, candidates.begin(), target);
29+
return ans;
30+
}
31+
};
32+

47-Permutations-II.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> ans;
4+
vector<int> res;
5+
void permute(vector<int> nums){
6+
int length = nums.size();
7+
if(length == 1){
8+
res.push_back(nums[0]);
9+
ans.push_back(vector<int>(res.begin(), res.end()));
10+
res.pop_back();
11+
return ;
12+
}
13+
else{
14+
int last;
15+
for(int i = 0; i < length; i++){
16+
if(i == 0){
17+
last = nums[i];
18+
}
19+
else if(last == nums[i]){
20+
continue;
21+
}
22+
last = nums[i];
23+
swap(nums[0], nums[i]);
24+
res.push_back(last);
25+
permute(vector<int>(nums.begin() + 1, nums.end()));
26+
res.pop_back();
27+
}
28+
}
29+
}
30+
vector<vector<int>> permuteUnique(vector<int>& nums) {
31+
sort(nums.begin(), nums.end());
32+
permute(vector<int>(nums.begin(), nums.end()));
33+
return ans;
34+
}
35+
};
36+

48-Rotate-Image.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
void rotate(vector<vector<int>>& matrix) {
4+
int side_length = matrix[0].size();
5+
for(int i = 0; i < side_length / 2; i++){
6+
for(int j = i; j < side_length - i - 1; j++){
7+
int temp = matrix[i][j];
8+
matrix[i][j] = matrix[side_length - j - 1][i];
9+
matrix[side_length - j - 1][i] = matrix[side_length - i - 1][side_length - j - 1];
10+
matrix[side_length - i - 1][side_length - j - 1] = matrix[j][side_length - i - 1];
11+
matrix[j][side_length - i - 1] = temp;
12+
}
13+
}
14+
}
15+
};
16+

49-Group-Anagrams.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
map<string, vector<string>> hashset;
4+
vector<vector<string>> groupAnagrams(vector<string>& strs) {
5+
for(vector<string>::iterator iter = strs.begin(); iter != strs.end(); iter++){
6+
string s = *iter;
7+
char *temp_str = (char *)(iter->c_str());
8+
sort(temp_str, temp_str + strlen(temp_str));
9+
map<string, vector<string>>::iterator temp_iter = hashset.find(string(temp_str));
10+
if(temp_iter != hashset.end()){
11+
(temp_iter->second).push_back(s);
12+
}
13+
else{
14+
vector<string> new_vector;
15+
new_vector.push_back(s);
16+
hashset.insert(pair<string, vector<string>>(string(temp_str), new_vector));
17+
}
18+
}
19+
vector<vector<string>> ans;
20+
for(map<string, vector<string>>::iterator iter = hashset.begin(); iter != hashset.end(); iter++){
21+
ans.push_back(iter->second);
22+
}
23+
return ans;
24+
}
25+
};
26+

0 commit comments

Comments
 (0)