Skip to content

Commit

Permalink
feat : 3sum and decode-ways
Browse files Browse the repository at this point in the history
  • Loading branch information
imsosleepy committed Dec 20, 2024
1 parent ac9036a commit a9c22f6
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
54 changes: 54 additions & 0 deletions 3sum/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ ๊ธฐ๋ณธ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(2^n)์ด๋ฏ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” O(NlogN)์€ ๋งˆ์Œ๊ป ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
for(int i =0; i< nums.length-2;i++) {
if (i > 0 && nums[i] == nums[i - 1]) continue;
int left = i + 1, right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];

if (sum == 0) {
result.add(Arrays.asList(nums[i], nums[left], nums[right]));

while (left < right && nums[left] == nums[left + 1]) left++;
while (left < right && nums[right] == nums[right - 1]) right--;

left++;
right--;
} else if (sum < 0) {
left++;
} else {
right--;
}
}
}
return result;
}


// dfs ํ’€์ด๋ฅผ ์ƒ๊ฐํ–ˆ์œผ๋‚˜ dfs ๋ฐฉ์‹์€ ๋ฌด์กฐ๊ฑด O(2^n)์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
// ํƒ€์ž„ ์•„์›ƒ ์˜ค๋‹ต
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Set<List<Integer>> answerSet = new HashSet<>();
nums = Arrays.stream(nums).sorted().toArray();
dfs(nums, 0, new ArrayList<>(), answerSet);
return new ArrayList<>(answerSet);
}

public void dfs(int[] nums, int index, List<Integer> temp, Set<List<Integer>> answerSet) {
if (temp.size() == 3) {
int result = 0;
for (int element : temp) result += element;
if (result == 0) answerSet.add(new ArrayList<>(temp));
return;
}

for (int i = index; i < nums.length; i++) {
temp.add(nums[i]);
dfs(nums, i + 1, temp, answerSet);
temp.remove(temp.size() - 1);
}
}
}
25 changes: 25 additions & 0 deletions decode-ways/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// ๋ฉ”์ธ ๋กœ์ง์€ ๋งž์•˜๋Š”๋ฐ, 0๋ฒˆ์งธ 1๋ฒˆ์งธ ๋•Œ๋ฌธ์— ๋น™๋น™ ๋Œ์•˜๋˜ ๋ฌธ์ œ
// dp[0] = 1์ด ์žˆ์–ด์•ผ ๋‘์ž๋ฆฌ ์ˆ˜ ๋””์ฝ”๋”ฉ์˜ ์ดˆ๊ธฐ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
class Solution {
public int numDecodings(String s) {
if (s == null || s.length() == 0) return 0;

int n = s.length();
int[] dp = new int[n + 1];

dp[0] = 1;
dp[1] = s.charAt(0) != '0' ? 1 : 0;

for (int i = 2; i <= n; i++) {
if (s.charAt(i - 1) != '0') {
dp[i] += dp[i - 1];
}
int twoDigit = Integer.parseInt(s.substring(i - 2, i));
if (twoDigit >= 10 && twoDigit <= 26) {
dp[i] += dp[i - 2];
}
}

return dp[n];
}
}

0 comments on commit a9c22f6

Please sign in to comment.