classSolution{private:
vector<vector<int>> res;
vector<int> path;voidbacktracking(vector<int>& candidates,int target,int sum,int start_index){if(sum == target){
res.push_back(path);return;}for(int i = start_index; i < candidates.size()&& candidates[i]+ sum <= target; i++){if(i > start_index && candidates[i]== candidates[i -1]){continue;}
sum += candidates[i];
path.push_back(candidates[i]);backtracking(candidates, target, sum, i +1);
sum -= candidates[i];
path.pop_back();}}public:
vector<vector<int>>combinationSum2(vector<int>& candidates,int target){
res.clear();
path.clear();sort(candidates.begin(), candidates.end());backtracking(candidates, target,0,0);return res;}};
662. 二叉树最大宽度
classSolution{public:intwidthOfBinaryTree(TreeNode* root){
queue<TreeNode*> que;if(root !=nullptr){
root->val =0;
que.push(root);}int res =0;int max = INT_MIN;while(!que.empty()){
res = std::max(res, que.back()->val - que.front()->val +1);int size = que.size();int start = que.front()->val;for(int i =0; i < size; i++){
TreeNode* node = que.front();
que.pop();if(node->left){
node->left->val =2* node->val -2*start;
que.push(node->left);}if(node->right){
node->right->val =2* node->val +1-2* start;
que.push(node->right);}}}return res;}};
31. 下一个排列
classSolution{public:voidnextPermutation(vector<int>& nums){int n = nums.size();int i =0;int j =0;for(i = n -2; i >=0; i--){if(nums[i]< nums[i +1]){break;}}if(i ==-1){reverse(nums.begin(), nums.end());}else{for(j = n -1; j >= i +1; j--){if(nums[j]> nums[i]){break;}}swap(nums[i], nums[j]);reverse(nums.begin()+ i +1, nums.end());}}};
98. 验证二叉搜索树
classSolution{private:
vector<int> res;voidtraversal(TreeNode* root){if(root ==nullptr)return;traversal(root->left);
res.push_back(root->val);traversal(root->right);}public:boolisValidBST(TreeNode* root){
res.clear();traversal(root);for(int i =1; i < res.size(); i++){if(res[i -1]< res[i]){continue;}else{returnfalse;}}returntrue;}};
189. 轮转数组
classSolution{public:voidrotate(vector<int>& nums,int k){int n = nums.size();
vector<int>temp(n);for(int i =0; i < n; i++){
temp[(i + k)% n]= nums[i];}
nums.assign(temp.begin(), temp.end());}};