Skip to content

Commit b01bb11

Browse files
authored
Merge pull request #2443 from nowrobin/main
[robinhan] WEEK 03 Solutions
2 parents 124c693 + fc25046 commit b01bb11

5 files changed

Lines changed: 121 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @param {number[]} candidates
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
function combinationSum(candidates, target) {
7+
var buffer = [];
8+
var result = [];
9+
search(0, target);
10+
return result;
11+
12+
function search(startIdx, target) {
13+
if (target === 0) return result.push(buffer.slice());
14+
if (target < 0) return;
15+
if (startIdx === candidates.length) return;
16+
buffer.push(candidates[startIdx]);
17+
search(startIdx, target - candidates[startIdx]);
18+
buffer.pop();
19+
search(startIdx + 1, target);
20+
}
21+
};
22+

โ€Ždecode-ways/nowrobin.jsโ€Ž

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
var numDecodings = function(s) {
6+
if (!s || s[0] === '0') {
7+
return 0;
8+
}
9+
10+
const n = s.length;
11+
const dp = new Array(n + 1).fill(0);
12+
dp[0] = 1;
13+
dp[1] = 1;
14+
15+
for (let i = 2; i <= n; ++i) {
16+
const oneDigit = parseInt(s[i - 1]);
17+
const twoDigits = parseInt(s.substring(i - 2, i));
18+
19+
if (oneDigit !== 0) {
20+
dp[i] += dp[i - 1];
21+
}
22+
23+
if (10 <= twoDigits && twoDigits <= 26) {
24+
dp[i] += dp[i - 2];
25+
}
26+
}
27+
28+
return dp[n];
29+
};
30+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var maxSubArray = function(nums) {
6+
if (!nums || nums.length === 0) {
7+
return 0;
8+
}
9+
10+
// max_so_far: overall maximum sum
11+
let max_so_far = nums[0];
12+
13+
// max_ending_here: max sum of subarray ending at current position
14+
let max_ending_here = nums[0];
15+
16+
for (let i = 1; i < nums.length; i++) {
17+
// Core decision: start new or extend previous
18+
max_ending_here = Math.max(nums[i], max_ending_here + nums[i]);
19+
20+
// Update overall maximum
21+
max_so_far = Math.max(max_so_far, max_ending_here);
22+
}
23+
24+
return max_so_far;
25+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number} n - 32๋น„ํŠธ ์ •์ˆ˜
3+
* @return {number} - ์ด์ง„์ˆ˜์—์„œ 1์˜ ๊ฐœ์ˆ˜
4+
*/
5+
var hammingWeight = function(n) {
6+
let setBitCount = 0; // 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
7+
8+
// n์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต (๋ชจ๋“  1๋น„ํŠธ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ๊นŒ์ง€)
9+
while (n !== 0) {
10+
// ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” 1๋น„ํŠธ๋ฅผ ์ œ๊ฑฐ
11+
// ์˜ˆ: 101100 -> 101000
12+
n &= (n - 1);
13+
14+
// 1๋น„ํŠธ ํ•˜๋‚˜ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ ์นด์šดํŠธ ์ฆ๊ฐ€
15+
setBitCount++;
16+
}
17+
18+
// ์ด 1์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
19+
return setBitCount;
20+
};
21+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
*/
5+
var isPalindrome = function(s) {
6+
// 1. ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ + ์•ŒํŒŒ๋ฒณ/์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ
7+
// (๊ณต๋ฐฑ, ํŠน์ˆ˜๋ฌธ์ž ์ œ๊ฑฐ)
8+
s = s.toLowerCase().replace(/[^a-z0-9]/g, "");
9+
10+
const length = s.length;
11+
12+
// 2. ๋ฌธ์ž์—ด์˜ ์ ˆ๋ฐ˜๋งŒ ์ˆœํšŒํ•˜๋ฉด์„œ ์–‘์ชฝ ๋น„๊ต
13+
for (let i = 0; i < length / 2; i++) {
14+
// ์™ผ์ชฝ(i) vs ์˜ค๋ฅธ์ชฝ(length - 1 - i)
15+
if (s[i] !== s[length - 1 - i]) {
16+
// ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ ์•„๋‹˜
17+
return false;
18+
}
19+
}
20+
21+
// 3. ๋๊นŒ์ง€ ๋ฌธ์ œ ์—†์œผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ
22+
return true;
23+
};

0 commit comments

Comments
ย (0)