From d5d9c433019f65c4aa161016484e8d8b8fe6e850 Mon Sep 17 00:00:00 2001 From: jthw1005 Date: Sat, 11 Jul 2026 22:58:19 +0900 Subject: [PATCH] week3 solutions --- combination-sum/jthw1005.js | 12 ++++++++++++ decode-ways/jthw1005.js | 16 ++++++++++++++++ maximum-subarray/jthw1005.js | 9 +++++++++ number-of-1-bits/jthw1005.js | 6 ++++++ valid-palindrome/jthw1005.js | 4 ++++ 5 files changed, 47 insertions(+) create mode 100644 combination-sum/jthw1005.js create mode 100644 decode-ways/jthw1005.js create mode 100644 maximum-subarray/jthw1005.js create mode 100644 number-of-1-bits/jthw1005.js create mode 100644 valid-palindrome/jthw1005.js diff --git a/combination-sum/jthw1005.js b/combination-sum/jthw1005.js new file mode 100644 index 0000000000..7576df1234 --- /dev/null +++ b/combination-sum/jthw1005.js @@ -0,0 +1,12 @@ +function combinationSum(candidates, target) { + const dp = Array.from({ length: target + 1 }, () => []); + dp[0] = [[]]; + for (let i = 0; i < candidates.length; i++) { + for (let j = candidates[i]; j <= target; j++) { + dp[j].push( + ...dp[j - candidates[i]].map((item) => [...item, candidates[i]]), + ); + } + } + return dp[target]; +} diff --git a/decode-ways/jthw1005.js b/decode-ways/jthw1005.js new file mode 100644 index 0000000000..0356eb11bb --- /dev/null +++ b/decode-ways/jthw1005.js @@ -0,0 +1,16 @@ +function numDecodings(s) { + const dp = Array.from({ length: s.length + 1 }, () => 0); + dp[0] = 1; + dp[1] = s[0] === '0' ? 0 : 1; + for (let i = 2; i <= s.length; i++) { + if (s[i - 1] !== '0') { + dp[i] += dp[i - 1]; + } + + const twoDigits = Number(s.slice(i - 2, i)); + if (twoDigits >= 10 && twoDigits <= 26) { + dp[i] += dp[i - 2]; + } + } + return dp[s.length]; +} diff --git a/maximum-subarray/jthw1005.js b/maximum-subarray/jthw1005.js new file mode 100644 index 0000000000..55f899f101 --- /dev/null +++ b/maximum-subarray/jthw1005.js @@ -0,0 +1,9 @@ +function maxSubArray(nums) { + let max = nums[0]; + let current = nums[0]; + for (let i = 1; i < nums.length; i++) { + current = Math.max(nums[i], current + nums[i]); + max = Math.max(max, current); + } + return max; +} diff --git a/number-of-1-bits/jthw1005.js b/number-of-1-bits/jthw1005.js new file mode 100644 index 0000000000..0784e46b45 --- /dev/null +++ b/number-of-1-bits/jthw1005.js @@ -0,0 +1,6 @@ +function hammingWeight(n) { + return n + .toString(2) + .split('') + .filter((v) => v === '1').length; +} diff --git a/valid-palindrome/jthw1005.js b/valid-palindrome/jthw1005.js new file mode 100644 index 0000000000..5f2bb18dfa --- /dev/null +++ b/valid-palindrome/jthw1005.js @@ -0,0 +1,4 @@ +function isPalindrome(s) { + const letters = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); + return letters === letters.split('').reverse().join(''); +}