Leetcode 216.组合总和III
思路分析:
参考《代码随想录》,可用回溯法解决此题,k为树的深度,9为树的宽度。终止条件达到了树的最大深度。最后减枝处理。
代码实现:
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
void backtracking(int targetSum, int k, int sum, int startIndex) {
if (sum > targetSum) {
return;
}
if (path.size() == k) {
if (sum == targetSum) result.push_back(path);
return;
}
for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {
sum += i;
path.push_back(i);
backtracking(targetSum, k, sum, i + 1);
sum -= i;
path.pop_back();
}
}
public:
vector<vector<int>> combinationSum3(int k, int n) {
backtracking(n, k, 0, 1);
return result;
}
};
Leetcode 17.电话号码的字母组合
思路分析:
代码实现: