Skip to content

Commit 58d117a

Browse files
committed
New and updated solutions.
Solutions to problems I solved since the last commit, and others that I edited in small / big ways.
1 parent 44cb3ea commit 58d117a

File tree

59 files changed

+1739
-13
lines changed

Some content is hidden

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

59 files changed

+1739
-13
lines changed

031_next-permutation.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution(object):
2+
def nextPermutation(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: void Do not return anything, modify nums in-place instead.
6+
"""
7+
if nums:
8+
for i in range(len(nums) - 1, 0, -1):
9+
if nums[i - 1] < nums[i]:
10+
for j in reversed(range(i, len(nums))):
11+
if nums[i - 1] < nums[j]:
12+
nums[i - 1], nums[j] = nums[j], nums[i - 1]
13+
break
14+
nums[i:] = nums[i:][::-1]
15+
return
16+
nums.reverse()
17+
18+
Solution().nextPermutation([4, 3, 1])

038_count-and-say.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution(object):
2+
def countAndSay(self, n):
3+
"""
4+
:type n: int
5+
:rtype: str
6+
"""
7+
current = "1"
8+
for i in range(1, n):
9+
count = 1
10+
next = []
11+
j = 1
12+
while j < len(current):
13+
if current[j] == current[j - 1]:
14+
count += 1
15+
j += 1
16+
else:
17+
next.append(str(count))
18+
next.append(current[j - 1])
19+
j += 1
20+
count = 1
21+
next.append(str(count))
22+
next.append(current[j - 1])
23+
current = "".join(next)
24+
return current
25+
26+
27+
print(Solution().countAndSay(5))

039_combination-sum.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution(object):
2+
def combinationSum(self, candidates, target):
3+
"""
4+
:type candidates: List[int]
5+
:type target: int
6+
:rtype: List[List[int]]
7+
"""
8+
sols = []
9+
for i, c in enumerate(candidates):
10+
if target - c > 0:
11+
lower = Solution().combinationSum(candidates[i:], target - c)
12+
for l in lower:
13+
l.insert(0, c)
14+
sols.append(l)
15+
pass
16+
elif target - c == 0:
17+
sols.append([c])
18+
else:
19+
continue
20+
return sols
21+
22+
23+
print(Solution().combinationSum([2, 3, 6, 7], 7))

040_combination-sum-ii.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution(object):
2+
def combinationSum2(self, candidates, target):
3+
"""
4+
:type candidates: List[int]
5+
:type target: int
6+
:rtype: List[List[int]]
7+
"""
8+
candidates = sorted(candidates)
9+
sols = []
10+
seen = []
11+
for i, c in enumerate(candidates):
12+
if c not in seen:
13+
if target - c > 0:
14+
lower = Solution().combinationSum2(candidates[i + 1:], target - c)
15+
for l in lower:
16+
l.insert(0, c)
17+
# if l not in sols:
18+
sols.append(l)
19+
seen.append(c)
20+
elif target - c == 0:
21+
# if [c] not in sols:
22+
sols.append([c])
23+
seen.append(c)
24+
else:
25+
break
26+
return sols
27+
28+
29+
print(Solution().combinationSum2([10, 1, 2, 7, 6, 1, 5], 8))

043_multiply-strings.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution(object):
2+
def convert_int(self, num_string):
3+
num = 0
4+
for n in num_string:
5+
num = num * 10 + int(n)
6+
return num
7+
8+
def multiply(self, num1, num2):
9+
"""
10+
:type num1: str
11+
:type num2: str
12+
:rtype: str
13+
"""
14+
n1 = self.convert_int(num1)
15+
n2 = self.convert_int(num2)
16+
17+
return str(n1 * n2)
18+
19+
20+
print(Solution().multiply("12", "12"))

046_permutations.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ def permute(self, nums):
1616
perms.append(nums)
1717
return perms
1818

19-
print(Solution().permute([1, 1, 2]))
19+
print(Solution().permute([1, 2, 3]))

048_rotate-image.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution(object):
2+
def rotate(self, matrix):
3+
"""
4+
:type matrix: List[List[int]]
5+
:rtype: void Do not return anything, modify matrix in-place instead.
6+
"""
7+
n = len(matrix)
8+
for i in range(n):
9+
for j in range(i, n):
10+
temp = matrix[i][j]
11+
matrix[i][j] = matrix[j][i]
12+
matrix[j][i] = temp
13+
14+
for j in range(int(n/2)):
15+
for i in range(n):
16+
temp = matrix[i][j]
17+
matrix[i][j] = matrix[i][n - j - 1]
18+
matrix[i][n - j - 1] = temp
19+
print(matrix)
20+
21+
Solution().rotate([
22+
[ 5, 1, 9,11],
23+
[ 2, 4, 8,10],
24+
[13, 3, 6, 7],
25+
[15,14,12,16]
26+
])

049_group-anagrams.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution(object):
2+
def groupAnagrams(self, strs):
3+
"""
4+
:type strs: List[str]
5+
:rtype: List[List[str]]
6+
"""
7+
anagram_dict = {}
8+
anagram_list = []
9+
count = 0
10+
for s in strs:
11+
srtd = "".join(sorted(s))
12+
if srtd in anagram_dict:
13+
anagram_list[anagram_dict[srtd]].append(s)
14+
else:
15+
anagram_dict[srtd] = count
16+
anagram_list.append([s])
17+
count += 1
18+
return anagram_list
19+
20+
21+
print(Solution().groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]))

053_maximum-subarray.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
class Solution(object):
2+
def maxSubArray(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
'''
8+
if not nums:
9+
return None
10+
elif len(nums) == 1:
11+
return nums[0]
12+
else:
13+
mid = int(len(nums) / 2)
14+
s1 = self.maxSubArray(nums[:mid])
15+
s2 = self.maxSubArray(nums[mid + 1:])
16+
if s1 and s2:
17+
max_val = max(s1, s1 + nums[mid] + s2, s1 + nums[mid], nums[mid] + s2, s2, nums[mid])
18+
elif s1:
19+
max_val = max(s1, s1 + nums[mid], nums[mid])
20+
elif s2:
21+
max_val = max(s2, nums[mid] + s2, nums[mid])
22+
print(nums, s1, s2, nums[mid], max_val)
23+
return max_val
24+
'''
25+
'''
26+
if s1:
27+
s1 = max(s1, s1 + nums[mid])
28+
if s2:
29+
s2 = max(s2, nums[mid] + s2)
30+
else:
31+
s2 = nums[mid]
32+
else:
33+
s1 = nums[mid]
34+
if s2:
35+
s2 = max(s2, s2 + nums[mid])
36+
else:
37+
s2 = nums[mid]
38+
39+
return max(s1, s2)i
40+
'''
41+
if nums:
42+
max_sum = nums[0]
43+
current_sum = nums[0]
44+
for n in nums[1:]:
45+
current_sum = max(n, current_sum + n)
46+
max_sum = max(current_sum, max_sum)
47+
else:
48+
max_sum = 0
49+
return max_sum
50+
51+
print(Solution().maxSubArray([-2,1]))
52+
53+
# print(Solution().maxSubArray([-64,78,56,10,-8,26,-18,47,-31,75,89,13,48,-19,-69,36,-39,55,-5,-4,-15,-37,-27,-8,-5,35,-51,83,21,-47,46,33,-91,-21,-57,0,81,1,-75,-50,-23,-86,39,-98,-29,69,38,32,24,-90,-95,86,-27,-23,-22,44,-88,3,27,9,55,-50,-80,40,5,-61,-82,-14,40,-58,35,93,-68,-26,94,3,-79,9,-88,21,19,-84,7,91,-8,84,12,-19,-13,-83,66,-80,-34,62,59,48,-98,53,-66,18,94,46,11,-73,96,-18,6,-83,91,17,38,10,9,-78,-22,77,83,89,-42,-30,-94,-98,-34,-51,63,-97,96,64,55,-93,-41,27,52,69,53,26,-71,-64,42,-80,52,-43,6,-62,-21,83,-85,-38,49,-50,8,55,-72,74,80,90,53,53,32,-15,36,90,-88,-34,37,41,91,65,76,33,61,5,90,-33,42,-54,-73,34,-16,75,83,91,7,-89,42,-36,77,-5,-83,9,80,53,-23,68,-81,90,10,-90,55,-14,19,-7,91,-14,59,33,31,62,-33,-85,37,-73,83,-78,-86,25,-15,91,97,2,-23,54,-68,53,22,-73,43,-68,-87,-25,18,31,67,-14,94,3,-81,25,-35,-37,17,79,-34,-23,-99,-43,-98,-38,-52,75,63,1,29,71,-68,-71,74,51,-40,86,-73,54,-5,70,-60,-11,-49,-64,90,-8,-25,-16,-52,40,60,-75,96,39,-13,-79,14,-73,22,-79,75,30,-51,49,-19,-15,36,-16,-60,-69,-68,-21,-4,-18,-9,-14,50,65,70,75,-17,30,99,-44,-31,-14,-46,60,-10,52,80,-35,-18,-94,-86,62,-10,49,-53,6,56,-45,62,-48,36,-47,15,-37,-81,-15,-62,-22,91,-85,33,-62,-23,86,97,66,15,54,-69,96,36,-55,36,-97,70,82,9,4,-63,-29,32,49,23,-53,88,18,8,-96,72,-23,-82,6,14,-6,-31,-12,-39,61,-58,-32,57,77,12,-7,56,-40,-48,-35,40,-35,12,-28,90,-87,-4,79,30,80,82,-20,-43,76,62,70,-30,-92,-42,7,68,-24,75,26,-70,-36,95,86,0,-52,-49,-60,12,63,-11,-20,75,84,-41,-18,41,-82,61,98,70,0,45,-83,8,-96,24,-24,-44,-24,-98,-14,39,97,-51,-60,-78,-24,-44,10,-84,44,89,67,5,-75,-73,-53,-81,64,-55,88,-35,89,-94,72,69,29,-52,-97,81,-73,-35,20,-99,13,36,98,65,69,8,81,13,-25,25,95,-1,51,-58,-5,16,-37,-17,57,-71,-35,29,75,70,53,77,51,79,-58,-51,56,31,84,54,-27,30,-37,-46,-56,14,56,-84,89,7,-43,-16,99,19,67,56,24,-68,-38,-1,-97,-84,-24,53,71,-6,-98,28,-98,63,-18,-25,-7,21,5,13,-88,-39,28,-98,68,61,-15,44,-43,-71,1,81,-39,62,-20,-60,54,33,69,26,-96,48,-69,-94,11,-11,-20,80,87,61,-29,98,-77,75,99,67,37,-38,11,93,-10,88,51,27,28,-68,66,-41,41,36,84,44,-16,91,49,71,-19,-94,28,-32,44,75,-57,66,51,-80,10,-35,-19,97,-65,70,63,86,-2,-9,94,-59,26,35,76,11,-21,-63,-21,-94,84,59,87,13,-96,31,-35,-53,-26,-84,-34,60,-20,23,58,15,-7,21,-22,67,88,-28,-91,14,-93,61,-98,-38,75,-19,-56,59,-83,-91,-51,-79,16,14,-56,90,6,-14,27,63,-91,-15,-22,-22,82,32,-54,47,-96,-69,-61,86,91,-60,-75,43,-3,-31,3,-9,-23,28,11,69,-81,31,59,25,-83,-36,-12,-75,48,42,-21,8,-26,24,-68,-23,31,-30,-60,0,-13,-36,-57,60,32,22,-49,85,-49,38,55,-54,-31,-9,70,-38,54,-65,-37,-20,76,42,64,-73,-57,95,-20,74,-57,19,-49,29,83,-7,-11,-8,-84,40,-45,-57,-45,86,-12,24,-46,-64,62,-91,-30,-74,-35,-76,44,-94,-73,86,77,7,37,-80,-74,87,48,85,-19,-85,-45,-27,31,9,-8,85,-28,79,-14,25,91,-51,10,-61,-49,74,-38,94,56,-12,57,34,71,-5,53,74,-18,-21,59,39,-30,90,-88,-99,-24,3,62,47,-40,-51,-27,-49,-26,82,-11,1,34,27,-5,-10,92,-48,-99,63,23,31,14,-94,-90,-49,44,-44,-59,33,-44,17,-64,-82,-36,-28,-57,13,0,-7,-4,88,70,-93,-7,-35,-4,-15,-6,-26,-75,93,-95,39,98,90,66,20,-54,-93,-47,-22,0,-35,-28,41,14,-8,-46,-86,84,26,-98,55,32,-29,96,-94,32,-33,-21,57,-39,-17,-27,-64,-50,-61,55,-28,-78,84,49,22,-73,-79,-37,40,12,-7,53,-26,-80,31,-94,51,-97,-98,56,34,-54,-88,-32,-17,-29,17,18,20,32,-49,91,54,-65,40,-47,-39,38,-8,-99,-73,84,30,0,-96,-38,5,32,-36,-16,-35,74,29,-23,-80,-88,47,36,29,-32,-54,79,-64,76,91,53,-71,-71,-9,-3,-93,17,-19,36,94,-38,97,-1,70,-62,82,-65,-87,11,11,-68,-1,-41,44,-71,3,89]))

054_spiral-matrix.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def spiralOrder(self, matrix):
3+
"""
4+
:type matrix: List[List[int]]
5+
:rtype: List[int]
6+
"""
7+
soln = []
8+
if matrix and matrix[0]:
9+
soln += matrix[0]
10+
del matrix[0]
11+
if matrix:
12+
for m in matrix:
13+
if m:
14+
soln.append(m.pop())
15+
if matrix:
16+
soln += reversed(matrix[-1])
17+
del matrix[-1]
18+
if matrix:
19+
for m in reversed(matrix):
20+
if m:
21+
soln.append(m.pop(0))
22+
if matrix:
23+
soln += self.spiralOrder(matrix)
24+
return soln
25+
26+
27+
print(Solution().spiralOrder([[7], [9], [6]]))

055_jump-game.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def canJump(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: bool
6+
"""
7+
jump = 0
8+
for i, num in enumerate(nums):
9+
if i > jump:
10+
return False
11+
jump = max(jump, i + num)
12+
return True
13+
14+
15+
print(Solution().canJump([3, 2, 0, 0, 4]))

056_merge-intervals.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for an interval.
2+
class Interval(object):
3+
def __init__(self, s=0, e=0):
4+
self.start = s
5+
self.end = e
6+
7+
class Solution(object):
8+
def merge(self, intervals):
9+
"""
10+
:type intervals: List[Interval]
11+
:rtype: List[Interval]
12+
"""
13+
sol = []
14+
intervals.sort(key=lambda i: i.start)
15+
for interval in intervals:
16+
if sol and interval.start <= sol[-1].end:
17+
sol[-1].end = max(sol[-1].end, interval.end)
18+
else:
19+
sol.append(interval)
20+
return sol
21+
22+
23+
def PrintInterval(intervals):
24+
string = ''
25+
for i in intervals:
26+
string += "[" + str(i.start) + ', ' + str(i.end) + "]"
27+
return string
28+
29+
print(PrintInterval(Solution().merge([Interval(3, 8), Interval(2, 6), Interval(8, 10), Interval(15, 18)])))

058_length-of-last-word.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution(object):
2+
def lengthOfLastWord(self, s):
3+
"""
4+
:type s: str
5+
:rtype: int
6+
"""
7+
try:
8+
return len(s.split()[-1:][0])
9+
except IndexError:
10+
return 0
11+
12+
print(Solution().lengthOfLastWord(""))

059_spiral-matrix-ii.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def generateMatrix(self, n):
3+
"""
4+
:type n: int
5+
:rtype: List[List[int]]
6+
"""
7+
if n > 0:
8+
nums = [i for i in range(1, (n ** 2) + 1)]
9+
soln = [[0 for _ in range(n)] for _ in range(n)]
10+
loop = 0
11+
while nums:
12+
try:
13+
for i in range(loop, n - loop):
14+
soln[loop][i] = nums.pop(0)
15+
for j in range(loop + 1, n - loop):
16+
soln[j][n - 1 - loop] = nums.pop(0)
17+
for i in range(n - 2 - loop, loop - 1, -1):
18+
soln[n - loop - 1][i] = nums.pop(0)
19+
for j in range(n - 2 - loop, loop, -1):
20+
soln[j][loop] = nums.pop(0)
21+
except IndexError:
22+
break
23+
loop += 1
24+
return soln
25+
else:
26+
return []
27+
28+
29+
30+
print(Solution().generateMatrix(5))

0 commit comments

Comments
 (0)