Skip to content

Commit 5d5990b

Browse files
committed
Add LeetCode problems 1-10
1 parent cad4d89 commit 5d5990b

11 files changed

+309
-0
lines changed

LeetCode/1. Two Sum.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> twoSum(vector<int>& nums, int target) {
4+
unordered_map<int, int> m;
5+
6+
int a, b;
7+
for(int i = 0, need; i < nums.size(); ++i) {
8+
need = target - nums[i];
9+
if(m.count(need) != 0) {
10+
a = i, b = m[need];
11+
break;
12+
}
13+
m[nums[i]] = i;
14+
}
15+
16+
vector<int> solution;
17+
solution.push_back(a);
18+
solution.push_back(b);
19+
return solution;
20+
}
21+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
private:
3+
static int const N = 1e2 + 1;
4+
int dp[N][N];
5+
6+
public:
7+
bool isMatch(string s, string p) {
8+
memset(dp, -1, sizeof dp);
9+
return rec(0, 0, s, p);
10+
}
11+
12+
bool rec(int i, int j, string &s, string &p) {
13+
if(j == p.length())
14+
return i == s.length();
15+
16+
int &ret = dp[i][j];
17+
if(ret != -1)
18+
return ret;
19+
20+
bool match = false;
21+
if(i < s.length() && (s[i] == p[j] || p[j] == '.'))
22+
match = true;
23+
24+
if(j + 1 < p.length() && p[j + 1] == '*')
25+
ret = (rec(i, j + 2, s, p) || match && rec(i + 1, j, s, p));
26+
else
27+
ret = match && rec(i + 1, j + 1, s, p);
28+
29+
return ret;
30+
}
31+
};

LeetCode/2. Add Two Numbers.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12+
ListNode *tmp = new ListNode(l1->val + l2->val);
13+
ListNode *solution = tmp;
14+
15+
l1 = l1->next;
16+
l2 = l2->next;
17+
18+
int rem = 0;
19+
if(tmp->val >= 10)
20+
rem = 1, tmp->val -= 10;
21+
22+
while(l1 != NULL || l2 != NULL) {
23+
if(l1 == NULL) {
24+
tmp->next = new ListNode(l2->val + rem);
25+
tmp = tmp->next;
26+
} else if(l2 == NULL) {
27+
tmp->next = new ListNode(l1->val + rem);
28+
tmp = tmp->next;
29+
} else {
30+
tmp->next = new ListNode(l1->val + l2->val + rem);
31+
tmp = tmp->next;
32+
}
33+
34+
rem = 0;
35+
if(tmp->val >= 10)
36+
rem = 1, tmp->val -= 10;
37+
38+
if(l1 != NULL)
39+
l1 = l1->next;
40+
if(l2 != NULL)
41+
l2 = l2->next;
42+
}
43+
44+
if(rem != 0)
45+
tmp->next = new ListNode(rem);
46+
47+
return solution;
48+
}
49+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int lengthOfLongestSubstring(string s) {
4+
int solution = 0, idx[128];
5+
for(int i = 0; i < 128; ++i)
6+
idx[i] = -1;
7+
8+
for(int i = 0, j = 0; j < s.length(); ++j) {
9+
if(idx[s[j]] != -1)
10+
i = max(idx[s[j]] + 1, i);
11+
solution = max(solution, j - i + 1);
12+
idx[s[j]] = j;
13+
}
14+
15+
return solution;
16+
}
17+
};
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution {
2+
public:
3+
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
4+
if(nums1.size() > nums2.size())
5+
swap(nums1, nums2);
6+
7+
int l = 0, r = nums1.size(), mid1, mid2;
8+
while(l <= r) {
9+
mid1 = (l + r) / 2;
10+
mid2 = (nums1.size() + nums2.size() + 1) / 2 - mid1;
11+
12+
int nums1_left, nums1_right, nums2_left, nums2_right;
13+
14+
if(mid1 - 1 >= 0)
15+
nums1_left = nums1[mid1 - 1];
16+
else
17+
nums1_left = -2e9;
18+
19+
if(mid1 < nums1.size())
20+
nums1_right = nums1[mid1];
21+
else
22+
nums1_right = 2e9;
23+
24+
if(mid2 - 1 >= 0)
25+
nums2_left = nums2[mid2 - 1];
26+
else
27+
nums2_left = -2e9;
28+
29+
if(mid2 < nums2.size())
30+
nums2_right = nums2[mid2];
31+
else
32+
nums2_right = 2e9;
33+
34+
if(nums1_left <= nums2_right && nums2_left <= nums1_right) {
35+
if((nums1.size() + nums2.size()) & 1)
36+
return max(nums1_left, nums2_left);
37+
return (max(nums1_left, nums2_left) + min(nums1_right, nums2_right)) / 2.0;
38+
} else if(nums2_left > nums1_right)
39+
l = mid1 + 1;
40+
else
41+
r = mid1 - 1;
42+
}
43+
44+
return -1;
45+
}
46+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
string longestPalindrome(string s) {
4+
int b = 0, e = 0;
5+
6+
for(int i = 0, j, k; i < s.length(); ++i) {
7+
j = i, k = i;
8+
while(j >= 0 && k < s.length() && s[j] == s[k])
9+
--j, ++k;
10+
++j, --k;
11+
if(k - j + 1 > e - b + 1)
12+
b = j, e = k;
13+
14+
15+
j = i, k = i + 1;
16+
while(j >= 0 && k < s.length() && s[j] == s[k])
17+
--j, ++k;
18+
++j, --k;
19+
if(k - j + 1 > e - b + 1)
20+
b = j, e = k;
21+
}
22+
23+
return s.substr(b, e - b + 1);
24+
}
25+
};

LeetCode/6. ZigZag Conversion.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+
string convert(string s, int numRows) {
4+
if(numRows == 1)
5+
return s;
6+
7+
string solution = "";
8+
int down_step = 2 * numRows - 3;
9+
int up_step = down_step;
10+
11+
for(int k = 0; k < numRows; ++k) {
12+
bool down = true;
13+
for(int i = k; i < s.length();) {
14+
solution += s[i];
15+
if(down)
16+
i += down_step + 1;
17+
else
18+
i += up_step + 1;
19+
down = !down;
20+
}
21+
22+
if(k == 0) {
23+
down_step -= 2;
24+
up_step = 1;
25+
} else {
26+
down_step -= 2;
27+
up_step += 2;
28+
}
29+
30+
if(down_step <= 0)
31+
down_step = up_step = 2 * numRows - 3;
32+
}
33+
34+
return solution;
35+
}
36+
};

LeetCode/7. Reverse Integer.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+
int reverse(int x) {
4+
int solution = 0;
5+
6+
while(x != 0) {
7+
int front = x % 10;
8+
x /= 10;
9+
if(solution > INT_MAX / 10 || (solution == INT_MAX / 10 && front > 7)) return 0;
10+
if(solution < INT_MIN / 10 || (solution == INT_MIN / 10 && front < -8)) return 0;
11+
solution = solution * 10 + front;
12+
}
13+
14+
return solution;
15+
}
16+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public:
3+
int myAtoi(string str) {
4+
char sign = '+';
5+
int index = -1;
6+
for(int i = 0; i < str.length(); ++i) {
7+
if(str[i] != '-' && str[i] != '+' && str[i] != ' ' && !isdigit(str[i]))
8+
return 0;
9+
if(str[i] == '-')
10+
sign = '-';
11+
if(str[i] == '-' && i + 1 < str.length() && !isdigit(str[i + 1]))
12+
return 0;
13+
if(str[i] == '+')
14+
sign = '+';
15+
if(str[i] == '+' && i + 1 < str.length() && !isdigit(str[i + 1]))
16+
return 0;
17+
if(isdigit(str[i])) {
18+
index = i;
19+
break;
20+
}
21+
}
22+
23+
if(index == -1)
24+
return 0;
25+
26+
int solution = 0;
27+
for(int i = index; isdigit(str[i]) && i < str.length(); ++i) {
28+
if(solution > INT_MAX / 10 || (solution == INT_MAX / 10 && str[i] - '0' > 7))
29+
return INT_MAX;
30+
if(solution < INT_MIN / 10 || (solution == INT_MIN / 10 && str[i] - '0' > 8))
31+
return INT_MIN;
32+
33+
if(sign == '-')
34+
solution = solution * 10 + -(str[i] - '0');
35+
else
36+
solution = solution * 10 + (str[i] - '0');
37+
}
38+
39+
return solution;
40+
}
41+
};

LeetCode/9. Palindrome Number.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool isPalindrome(int x) {
4+
if(x < 0)
5+
return false;
6+
7+
long long reverse = 0, tmp = x;
8+
while(tmp != 0) {
9+
reverse = reverse * 10 + tmp % 10;
10+
tmp /= 10;
11+
}
12+
13+
return x == reverse;
14+
}
15+
};

LeetCode/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Problems links
2+
3+
- [1. Two Sum](https://leetcode.com/problems/two-sum)
4+
- [2. Add Two Numbers](https://leetcode.com/problems/add-two-numbers)
5+
- [3. Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters)
6+
- [4. Median of Two Sorted Arrays](https://leetcode.com/problems/median-of-two-sorted-arrays)
7+
- [5. Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring)
8+
- [6. ZigZag Conversion](https://leetcode.com/problems/zigzag-conversion)
9+
- [7. Reverse Integer](https://leetcode.com/problems/reverse-integer)
10+
- [8. String to Integer (atoi)](https://leetcode.com/problems/string-to-integer-atoi)
11+
- [9. Palindrome Number](https://leetcode.com/problems/palindrome-number)
12+
- [10. Regular Expression Matching](https://leetcode.com/problems/regular-expression-matching)

0 commit comments

Comments
 (0)