-
93.复原IP地址
-
class Solution { public: vector<string> b; bool pd(string& s, int l, int r) { if(l>r) return 0; int count = 0; if (s[l] == '0' && l != r) return 0; for (; l <= r; l++) { if (s[l] > '9' || s[l] < '0') return 0; count = count * 10 + (s[l] - '0'); if (count >= 256) return 0; } return 1; } void dfs(string s, int start, int p) { if (p == 3) { if(pd(s,start,s.size()-1)) b.push_back(s); return; } for (int i = start; i < s.size(); i++) { if (pd(s, start, i)) { s.insert(s.begin() + i + 1, '.'); dfs(s, i + 2,p+1); s.erase(s.begin() + i + 1); } } } vector<string> restoreIpAddresses(string s) { dfs(s, 0, 0); return b; } };
-
78.子集
-
class Solution { public: vector<vector<int>> b; vector<int> a; void dfs(vector<int>& nums,int s){ b.push_back(a); if(a.size()>=nums.size()) return ; for(int i=s;i<nums.size();i++){ a.push_back(nums[i]); dfs(nums,i+1); a.pop_back(); } } vector<vector<int>> subsets(vector<int>& nums) { dfs(nums,0); return b; } };
-
90.子集II
-
class Solution { public: vector<vector<int>> b; vector<int> a; void dfs(vector<int>& nums, int s, vector<bool> used) { b.push_back(a); if (a.size() > nums.size()) return; for (int i = s; i < nums.size(); i++) { if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == 0) continue; a.push_back(nums[i]); used[i] = 1; dfs(nums, i + 1, used); used[i] = 0; a.pop_back(); } } vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<bool> used(nums.size(), 0); dfs(nums, 0, used); return b; } };