立志重刷代码随想录60天冲冲冲!!——第二十二天
第77题. 组合
class Solution { public: vector<vector<int>> res; vector<int> path; void backtracking(int n, int k, int startIdx) { if (path.size() == k) { res.push_back(path); return; } for (int i = startIdx; i <= n; i++) { path.push_back(i); backtracking(n, k, ++startIdx); path.pop_back(); } return; } vector<vector<int>> combine(int n, int k) { backtracking(n, k, 1); return res; } };
216.组合总和III
class Solution { public: int sum = 0; vector<int> path; vector<vector<int>> res; void backtracking (int k, int n, int startIdx) { if (path.size() == k && sum == n) { res.push_back(path); return; } for (int i = startIdx; i <= 9; i++) { path.push_back(i); sum += i; backtracking(k, n, ++startIdx); sum -= i; path.pop_back(); } return; } vector<vector<int>> combinationSum3(int k, int n) { backtracking(k, n, 1); return res; } };
17.电话号码的字母组合
之前一直有问题,我是用了++index,不能用自增,会越界
class Solution { public: string umap[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" }; string path; vector<string>res; void backtracking(string digits, int index) { if (digits.size() == index) { res.push_back(path); return; } int digit = digits[index] - '0'; string letters = umap[digit]; for (int i = 0; i < letters.size(); i++) { path.push_back(letters[i]); backtracking(digits, index + 1); path.pop_back(); } return; } vector<string> letterCombinations(string digits) { if (digits == "") return res; backtracking(digits, 0); return res; } };
代码随想录更新 文章被收录于专栏
冲冲冲冲冲冲!