Skip to content

Commit 785af7e

Browse files
author
kwu130
committed
feat(src): add 90-subsetsWithDup, 91-numDecodings
1 parent 37d2c41 commit 785af7e

2 files changed

Lines changed: 97 additions & 0 deletions

File tree

‎src/90-subsetsWithDup.cpp‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//
2+
// Created by 1412 on 2025/11/21.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
#include "../include/common.h"
7+
8+
using namespace std;
9+
10+
class Solution {
11+
public:
12+
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
13+
vector<vector<int>> res;
14+
ranges::sort(nums);
15+
dfs(nums, 0, {}, res);
16+
return res;
17+
}
18+
19+
private:
20+
void dfs(vector<int>& nums, int index, vector<int>&& path, vector<vector<int>>& res) {
21+
res.emplace_back(path);
22+
for (int i = index; i < nums.size(); ++i) {
23+
if (i > index && nums[i] == nums[i - 1]) {
24+
continue;
25+
}
26+
path.emplace_back(nums[i]);
27+
dfs(nums, i + 1, std::move(path), res);
28+
path.pop_back();
29+
}
30+
}
31+
};
32+
33+
void test() {
34+
Solution s;
35+
vector<int> nums = {1, 2, 2};
36+
vector<vector<int>> expected = {
37+
{},
38+
{1},
39+
{1, 2},
40+
{1, 2, 2},
41+
{2},
42+
{2, 2}
43+
};
44+
vector<vector<int>> res = s.subsetsWithDup(nums);
45+
assert(compareHelper::equalIgnoreOrder(res, expected));
46+
47+
nums = {0};
48+
expected = {{}, {0}};
49+
res = s.subsetsWithDup(nums);
50+
assert(compareHelper::equalIgnoreOrder(res, expected));
51+
}
52+
53+
int main() {
54+
test();
55+
return 0;
56+
}

‎src/91-numDecodings.cpp‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//
2+
// Created by 1412 on 2025/11/21.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
7+
using namespace std;
8+
9+
class Solution {
10+
public:
11+
int numDecodings(string s) {
12+
vector<int> dp(s.size() + 1, 0);
13+
dp[0] = 1; // ""
14+
if (s[0] == '0') {
15+
dp[1] = 0;
16+
} else {
17+
dp[1] = 1;
18+
}
19+
for (int i = 2; i <= s.size(); i++) {
20+
if (s[i - 1] != '0') {
21+
dp[i] += dp[i - 1];
22+
}
23+
if (s[i - 2] == '1' || (s[i - 2] == '2' && s[i - 1] <= '6')) {
24+
dp[i] += dp[i - 2];
25+
}
26+
}
27+
return dp[s.size()];
28+
}
29+
};
30+
31+
void test() {
32+
Solution s;
33+
assert(s.numDecodings("12") == 2);
34+
assert(s.numDecodings("226") == 3);
35+
assert(s.numDecodings("06") == 0);
36+
}
37+
38+
int main() {
39+
test();
40+
return 0;
41+
}

0 commit comments

Comments
 (0)