From 12d35cb72e5cd0db69b58dfc269f55be9ec9a417 Mon Sep 17 00:00:00 2001 From: kimseongeun Date: Wed, 16 Apr 2025 22:47:24 +0900 Subject: [PATCH 1/4] week 3 solutions --- number-of-1-bits/i-mprovising.py | 9 +++++++++ valid-palindrome/i-mprovising.py | 13 +++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 number-of-1-bits/i-mprovising.py create mode 100644 valid-palindrome/i-mprovising.py diff --git a/number-of-1-bits/i-mprovising.py b/number-of-1-bits/i-mprovising.py new file mode 100644 index 000000000..3bff8cf22 --- /dev/null +++ b/number-of-1-bits/i-mprovising.py @@ -0,0 +1,9 @@ +""" +Time complexity O(n) +Space complexity O(1) +""" + +class Solution: + def hammingWeight(self, n: int) -> int: + return bin(n).count('1') + \ No newline at end of file diff --git a/valid-palindrome/i-mprovising.py b/valid-palindrome/i-mprovising.py new file mode 100644 index 000000000..bc33565e7 --- /dev/null +++ b/valid-palindrome/i-mprovising.py @@ -0,0 +1,13 @@ +""" +Time complexity O(n) +Space complexity O(n) +""" + +class Solution: + def isPalindrome(self, s: str) -> bool: + # preprocessing + string = [c for c in s.lower() if c.isalnum()] + + if string == [c for c in string[::-1]]: + return True + return False From 6498391b2037346f09b75cc870d9263048c17d40 Mon Sep 17 00:00:00 2001 From: kimseongeun Date: Wed, 16 Apr 2025 22:49:55 +0900 Subject: [PATCH 2/4] fix number-of-1-bits linelint --- number-of-1-bits/i-mprovising.py | 1 - 1 file changed, 1 deletion(-) diff --git a/number-of-1-bits/i-mprovising.py b/number-of-1-bits/i-mprovising.py index 3bff8cf22..9494d565d 100644 --- a/number-of-1-bits/i-mprovising.py +++ b/number-of-1-bits/i-mprovising.py @@ -6,4 +6,3 @@ class Solution: def hammingWeight(self, n: int) -> int: return bin(n).count('1') - \ No newline at end of file From eea1160f49aa4256433881fc8e036dc5e876619c Mon Sep 17 00:00:00 2001 From: kimseongeun Date: Wed, 16 Apr 2025 23:59:06 +0900 Subject: [PATCH 3/4] decode-ways solution --- decode-ways/i-mprovising.py | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 decode-ways/i-mprovising.py diff --git a/decode-ways/i-mprovising.py b/decode-ways/i-mprovising.py new file mode 100644 index 000000000..4e4d694c3 --- /dev/null +++ b/decode-ways/i-mprovising.py @@ -0,0 +1,40 @@ +""" +Time complexity O(n) +Space complexity O(1) + +Dynamic programming +""" + + +class Solution: + def numDecodings(self, s: str) -> int: + if s[0] == '0': + return 0 + n = len(s) + if n == 1: + return 1 + tmp = int(s[:2]) + dp = [1, 1] + if 11 <= tmp <= 26: + if tmp != 20: + dp = [1, 2] + elif s[1] == '0': + if tmp not in [10, 20]: + return 0 + if n == 2: + return dp[-1] + + for i in range(2, n): + if s[i] == '0': + if s[i-1] in ['1', '2']: + cur = dp[0] + else: + return 0 + else: + cur = dp[1] + tmp = int(s[i-1:i+1]) + if (11 <= tmp <= 26) and (tmp != 20): + cur += dp[0] + dp = [dp[1], cur] + + return dp[-1] From 83139c19db2b5843d2af757be5b3160bf07f812a Mon Sep 17 00:00:00 2001 From: kimseongeun Date: Sat, 19 Apr 2025 15:31:59 +0900 Subject: [PATCH 4/4] add combination sum, maximum subarray solution --- combination-sum/i-mprovising.py | 19 +++++++++++++++++++ maximum-subarray/i-mprovising.py | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 combination-sum/i-mprovising.py create mode 100644 maximum-subarray/i-mprovising.py diff --git a/combination-sum/i-mprovising.py b/combination-sum/i-mprovising.py new file mode 100644 index 000000000..e1f4adbab --- /dev/null +++ b/combination-sum/i-mprovising.py @@ -0,0 +1,19 @@ +""" +Time complexity O(c*t) +Space complexity O(c*t) + +Dynamic programming +""" + +class Solution: + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: + # init dp array + dp = [[] for _ in range(target+1)] # dp[i] : combinations to sum to i + dp[0] = [[]] + + for candidate in candidates: + for num in range(candidate, target+1): + for comb in dp[num-candidate]: + dp[num].append(comb + [candidate]) + + return dp[-1] diff --git a/maximum-subarray/i-mprovising.py b/maximum-subarray/i-mprovising.py new file mode 100644 index 000000000..1e9cfeb2c --- /dev/null +++ b/maximum-subarray/i-mprovising.py @@ -0,0 +1,18 @@ +""" +Time complexity O(n) +Space complexity O(n) + +Dynamic programming +""" + + +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + n = len(nums) + dp = [0 for _ in range(n)] + dp[0] = nums[0] + + for i in range(1, n): + dp[i] = max(dp[i-1]+nums[i], nums[i]) + + return max(dp)