Skip to content

Commit a9c22f6

Browse files
committed
feat : 3sum and decode-ways
1 parent ac9036a commit a9c22f6

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

โ€Ž3sum/imsosleepy.javaโ€Ž

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ ๊ธฐ๋ณธ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(2^n)์ด๋ฏ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” O(NlogN)์€ ๋งˆ์Œ๊ป ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.
2+
public List<List<Integer>> threeSum(int[] nums) {
3+
List<List<Integer>> result = new ArrayList<>();
4+
Arrays.sort(nums);
5+
for(int i =0; i< nums.length-2;i++) {
6+
if (i > 0 && nums[i] == nums[i - 1]) continue;
7+
int left = i + 1, right = nums.length - 1;
8+
while (left < right) {
9+
int sum = nums[i] + nums[left] + nums[right];
10+
11+
if (sum == 0) {
12+
result.add(Arrays.asList(nums[i], nums[left], nums[right]));
13+
14+
while (left < right && nums[left] == nums[left + 1]) left++;
15+
while (left < right && nums[right] == nums[right - 1]) right--;
16+
17+
left++;
18+
right--;
19+
} else if (sum < 0) {
20+
left++;
21+
} else {
22+
right--;
23+
}
24+
}
25+
}
26+
return result;
27+
}
28+
29+
30+
// dfs ํ’€์ด๋ฅผ ์ƒ๊ฐํ–ˆ์œผ๋‚˜ dfs ๋ฐฉ์‹์€ ๋ฌด์กฐ๊ฑด O(2^n)์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
31+
// ํƒ€์ž„ ์•„์›ƒ ์˜ค๋‹ต
32+
public class Solution {
33+
public List<List<Integer>> threeSum(int[] nums) {
34+
Set<List<Integer>> answerSet = new HashSet<>();
35+
nums = Arrays.stream(nums).sorted().toArray();
36+
dfs(nums, 0, new ArrayList<>(), answerSet);
37+
return new ArrayList<>(answerSet);
38+
}
39+
40+
public void dfs(int[] nums, int index, List<Integer> temp, Set<List<Integer>> answerSet) {
41+
if (temp.size() == 3) {
42+
int result = 0;
43+
for (int element : temp) result += element;
44+
if (result == 0) answerSet.add(new ArrayList<>(temp));
45+
return;
46+
}
47+
48+
for (int i = index; i < nums.length; i++) {
49+
temp.add(nums[i]);
50+
dfs(nums, i + 1, temp, answerSet);
51+
temp.remove(temp.size() - 1);
52+
}
53+
}
54+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// ๋ฉ”์ธ ๋กœ์ง์€ ๋งž์•˜๋Š”๋ฐ, 0๋ฒˆ์งธ 1๋ฒˆ์งธ ๋•Œ๋ฌธ์— ๋น™๋น™ ๋Œ์•˜๋˜ ๋ฌธ์ œ
2+
// dp[0] = 1์ด ์žˆ์–ด์•ผ ๋‘์ž๋ฆฌ ์ˆ˜ ๋””์ฝ”๋”ฉ์˜ ์ดˆ๊ธฐ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
3+
class Solution {
4+
public int numDecodings(String s) {
5+
if (s == null || s.length() == 0) return 0;
6+
7+
int n = s.length();
8+
int[] dp = new int[n + 1];
9+
10+
dp[0] = 1;
11+
dp[1] = s.charAt(0) != '0' ? 1 : 0;
12+
13+
for (int i = 2; i <= n; i++) {
14+
if (s.charAt(i - 1) != '0') {
15+
dp[i] += dp[i - 1];
16+
}
17+
int twoDigit = Integer.parseInt(s.substring(i - 2, i));
18+
if (twoDigit >= 10 && twoDigit <= 26) {
19+
dp[i] += dp[i - 2];
20+
}
21+
}
22+
23+
return dp[n];
24+
}
25+
}

0 commit comments

Comments
ย (0)