Skip to content

Commit c1668fc

Browse files
committed
feat: rename file to ignorecase false
1 parent fa6c3ec commit c1668fc

File tree

55 files changed

+1345
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1345
-0
lines changed

leetcode/001.two-sum/Solution.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from typing import List
2+
3+
4+
class Solution(object):
5+
# brute force
6+
def twoSum(self, nums: List[int], target: int) -> List[int]:
7+
for i in range(len(nums)):
8+
for j in range(i + 1, len(nums)):
9+
if (nums[i] + nums[j]) == target:
10+
return [i, j]
11+
12+
# mistaken attempt, only for orderly array
13+
def twoSum2(self, nums: List[int], target: int) -> List[int]:
14+
for left in range(len(nums)):
15+
for right in range(len(nums) - 1, left, -1):
16+
if nums[left] + nums[right] > target:
17+
continue
18+
elif nums[left] + nums[right] < target:
19+
break
20+
else:
21+
return [left, right]
22+
23+
def twoSum3(self, nums: List[int], target: int) -> List[int]:
24+
map = {}
25+
for index, cur in enumerate(nums):
26+
expect = target - cur
27+
if expect in map:
28+
return [index, map[expect]]
29+
map[cur] = index
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from ListNode import ListNode
2+
3+
4+
class Solution:
5+
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
6+
l3 = l = ListNode(0)
7+
carry = 0
8+
while l1 or l2 or carry:
9+
sum = (l1.val if l1 else 0) + (l2.val if l2 else 0) + carry
10+
carry, digit = divmod(sum, 10)
11+
l.next = ListNode(digit)
12+
l = l.next
13+
if l1:
14+
l1 = l1.next
15+
if l2:
16+
l2 = l2.next
17+
return l3.next
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def lengthOfLongestSubstring(self, s: str) -> int:
3+
ans = 0
4+
arr = []
5+
for i in s:
6+
if i in arr:
7+
if len(arr) > ans:
8+
ans = len(arr)
9+
arr = arr[arr.index(i) + 1:]
10+
arr.append(i)
11+
return ans if len(arr) < ans else len(arr)
12+
13+
def lengthOfLongestSubstring1(self, s: str) -> int:
14+
ans = l = r = 0
15+
smap = {}
16+
slen = len(s)
17+
while l < slen and r < slen:
18+
if smap.get(s[r]):
19+
smap[s[l]] = False
20+
l += 1
21+
else:
22+
smap[s[r]] = True
23+
r += 1
24+
if r - l > ans:
25+
ans = r - l
26+
27+
return ans
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
6+
arrs = nums1 + nums2
7+
arrs.sort()
8+
arrs_len = len(arrs)
9+
if arrs_len % 2 == 1:
10+
return arrs[arrs_len // 2]
11+
else:
12+
return (arrs[arrs_len // 2 - 1] + arrs[arrs_len // 2]) / 2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def longestPalindrome(self, s: str) -> str:
3+
sLen = len(s)
4+
# 2d array
5+
dp = [[False] * sLen for i in range(sLen)]
6+
7+
start = end = max = 0
8+
for j in range(sLen):
9+
for i in range(j, -1, -1):
10+
if i == j:
11+
dp[i][i] = True
12+
elif i + 1 == j:
13+
dp[i][j] = (s[i] == s[j])
14+
else:
15+
dp[i][j] = s[i] == s[j] and dp[i + 1][j - 1]
16+
if dp[i][j] and j - i > max:
17+
start = i
18+
end = j
19+
max = j - i
20+
return s[start:end + 1]
21+
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def convert(self, s: str, numRows: int) -> str:
3+
if numRows == 1 or numRows >= len(s):
4+
return s
5+
arrs = [[] for i in range(len(s))]
6+
incre = 1
7+
index = 0
8+
for i in range(len(s)):
9+
arrs[index].append(s[i])
10+
if index == 0:
11+
incre = 1
12+
elif index == numRows - 1:
13+
incre = -1
14+
index += incre
15+
return ''.join([i for item in arrs for i in item])
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Solution:
2+
def reverse(self, x: int) -> int:
3+
result = int(str(x)[::-1]) if x >= 0 else -int(str(x)[1:][::-1])
4+
return result if abs(result) < pow(2, 31) else 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
class Solution:
3+
def myAtoi(self, str: str) -> int:
4+
MAX_NUM = pow(2, 31) - 1
5+
# discard whitespace
6+
str = str.strip()
7+
# check if can convert to int
8+
if not str or (not str[0].isnumeric() and str[0] not in ['-', '+']):
9+
return 0
10+
11+
ret = ''
12+
index = 0
13+
signal = 1
14+
# set sigm
15+
if str[0] == '-':
16+
index += 1
17+
signal = -1
18+
elif str[0] == '+':
19+
index += 1
20+
21+
while index < len(str):
22+
if not str[index].isnumeric():
23+
break
24+
ret += str[index]
25+
index += 1
26+
if int(ret) > MAX_NUM:
27+
return MAX_NUM if signal == 1 else -MAX_NUM - 1
28+
29+
return int(ret) * signal if ret else 0
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import math
2+
3+
4+
class Solution:
5+
def isPalindrome(self, x: int) -> bool:
6+
if x < 0:
7+
return False
8+
elif x < 10:
9+
return True
10+
elif x % 10 == 0:
11+
return False
12+
s = str(x)
13+
slen = len(s)
14+
for i in range(math.ceil(slen / 2)):
15+
if s[i] != s[slen - 1 - i]:
16+
return False
17+
return True
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def isMatch(self, s: str, p: str) -> bool:
3+
if not p:
4+
return not s
5+
first_match = bool(s) and p[0] in (s[0], '.')
6+
if len(p) >= 2 and p[1] == '*':
7+
return self.isMatch(s, p[2:]) or first_match and self.isMatch(s[1:], p)
8+
else:
9+
return first_match and self.isMatch(s[1:], p[1:])
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def maxArea(self, height: List[int]) -> int:
6+
l = 0
7+
r = len(height) - 1
8+
max = 0
9+
while l < r:
10+
ret = min(height[l], height[r]) * (r - l)
11+
if ret > max:
12+
max = ret
13+
if height[l] < height[r]:
14+
l += 1
15+
else:
16+
r -= 1
17+
return max
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def intToRoman(self, num: int) -> str:
3+
M = ['', 'M', 'MM', 'MMM']
4+
C = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']
5+
X = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']
6+
I = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']
7+
return (
8+
M[num // 1000] +
9+
C[num % 1000 // 100] +
10+
X[(num % 100) // 10] +
11+
I[num % 10]
12+
)
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def romanToInt(self, s: str) -> int:
3+
map = {
4+
'': 0,
5+
'I': 1,
6+
'V': 5,
7+
'X': 10,
8+
'L': 50,
9+
'C': 100,
10+
'D': 500,
11+
'M': 1000,
12+
}
13+
prev = ''
14+
ret = 0
15+
for i in s[::-1]:
16+
ret += map[i] * (-1 if map[prev] > map[i] else 1)
17+
prev = i
18+
19+
return ret
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def longestCommonPrefix(self, strs: List[str]) -> str:
6+
str_nums = len(strs)
7+
strs.sort(key=lambda a: len(a))
8+
if not str_nums or ('' in strs):
9+
return ''
10+
elif str_nums == 1:
11+
return strs[0]
12+
strs_first = strs[0]
13+
offset = 0
14+
while offset < len(strs_first):
15+
for o in strs[1:]:
16+
if strs_first[offset] != o[offset]:
17+
return strs_first[0:offset]
18+
offset += 1
19+
return strs_first

leetcode/015.3sum/Solution.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
将 threeSum 转为 twoSum 问题
3+
'''
4+
from typing import List
5+
6+
7+
class Solution:
8+
# Time Limit Exceeded
9+
def threeSum(self, nums: List[int]) -> List[List[int]]:
10+
result = []
11+
for index, a in enumerate(nums):
12+
map = {}
13+
for offset in range(index + 1, len(nums), 1):
14+
b = nums[offset]
15+
c = -a - b
16+
if c in map:
17+
three_sum = sorted([a, b, c])
18+
if three_sum in result:
19+
continue
20+
result.append(three_sum)
21+
else:
22+
map[b] = offset
23+
return result
24+
25+
def threeSum1(self, nums: List[int]) -> List[List[int]]:
26+
nums.sort()
27+
result = []
28+
for index, first_num in enumerate(nums[:-2]):
29+
if index > 0 and nums[index] == nums[index - 1]:
30+
continue
31+
left = index + 1
32+
right = len(nums) - 1
33+
target = -first_num
34+
while left < right:
35+
two_sum = nums[left] + nums[right]
36+
if two_sum == target:
37+
result.append([first_num, nums[left], nums[right]])
38+
while left < right and nums[left] == nums[left + 1]:
39+
left += 1
40+
while left < right and nums[right] == nums[right - 1]:
41+
right -= 1
42+
left += 1
43+
right -= 1
44+
elif two_sum < target:
45+
left += 1
46+
else:
47+
right -= 1
48+
return result

leetcode/016.3sum-closest/Solution.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from typing import List
2+
import math
3+
4+
5+
class Solution:
6+
def threeSumClosest(self, nums: List[int], target: int) -> int:
7+
nums.sort()
8+
closest_sum = math.inf
9+
if len(nums) == 3:
10+
return sum(nums)
11+
for index, a in enumerate(nums):
12+
left = index + 1
13+
right = len(nums) - 1
14+
while left < right:
15+
sum_three = sum([a, nums[left], nums[right]])
16+
if abs(target - sum_three) < abs(target - closest_sum):
17+
closest_sum = sum_three
18+
if sum_three == target:
19+
return closest_sum
20+
if sum_three > target:
21+
right -= 1
22+
else:
23+
left += 1
24+
return closest_sum
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def letterCombinations(self, digits: str) -> List[str]:
6+
if not len(digits):
7+
return []
8+
map_list = ['', '', 'abc', 'def', 'ghi',
9+
'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
10+
result = list(map_list[int(digits[0])])
11+
for i in range(1, len(digits), 1):
12+
while len(result[0]) == i:
13+
prefix = result.pop(0)
14+
for j in map_list[int(digits[i])]:
15+
result.append(prefix + j)
16+
return result

leetcode/018.4sum/Solution.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'''
2+
将 fourSum 转换为 threeSum 解决
3+
'''
4+
from typing import List
5+
6+
7+
class Solution:
8+
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
9+
nums.sort()
10+
result = []
11+
if len(nums) < 4 or nums[-1] * 4 < target or nums[0] * 4 > target:
12+
return result
13+
for i in range(len(nums) - 3):
14+
first_num = nums[i]
15+
if i > 0 and nums[i] == nums[i - 1]:
16+
continue
17+
for j in range(i + 1, len(nums) - 2, 1):
18+
second_num = nums[j]
19+
if j > i + 1 and nums[j] == nums[j - 1]:
20+
continue
21+
left = j + 1
22+
right = len(nums) - 1
23+
expect = target - first_num - second_num
24+
while left < right:
25+
two_sum = nums[left] + nums[right]
26+
if two_sum == expect:
27+
result.append(
28+
[first_num, second_num, nums[left], nums[right]])
29+
while left < right and nums[left] == nums[left + 1]:
30+
left += 1
31+
while left < right and nums[right] == nums[right - 1]:
32+
right -= 1
33+
left += 1
34+
right -= 1
35+
elif two_sum < expect:
36+
left += 1
37+
else:
38+
right -= 1
39+
return result

0 commit comments

Comments
 (0)