每日一题day3:LeetCode
15. 三数之和
22. 括号生成
102. 二叉树的层序遍历
198. 打家劫舍
62. 不同路径
55. 跳跃游戏
1、15. 三数之和
class Solution {
public:
vector<vector<int>> ans;
vector<vector<int>> threeSum(vector<int>& nums) {
int size = nums.size();
int l, r;
sort(nums.begin(), nums.end());
for(int i = 0; i < size - 2; i++){
l = i + 1, r = size - 1;
if(nums[i] > 0) return ans;
if(i && nums[i] == nums[i - 1]) continue;
while(l < r){
int sum = nums[i] + nums[l] + nums[r];
if(sum == 0){
vector<int> now;
now.push_back(nums[i]);
now.push_back(nums[l]);
now.push_back(nums[r]);
ans.push_back(now);
while(l < r && nums[l] == nums[l + 1]) l++;
while(l < r && nums[r] == nums[r - 1]) r--;
l++; r--;
}else if(sum > 0){
r--;
}else l++;
}
}
return ans;
}
};
2、22. 括号生成
class Solution {
public:
void dfs(vector<string>& ans, string now, int n, int l, int r){
if(r > l || l > n || r > n) return ;
if(l == r && l == n){
ans.push_back(now);
return ;
}
dfs(ans, now + '(', n, l + 1, r);
dfs(ans, now + ')', n, l, r + 1);
}
vector<string> generateParenthesis(int n) {
vector<string> ans;
dfs(ans, "", n, 0, 0);
return ans;
}
};
3、102. 二叉树的层序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
que.push(root);
vector<vector<int>> ans;
if(root == NULL) return ans;
while(!que.empty()){
int size = que.size();
vector<int> now;
while(size--){
TreeNode* temp = que.front(); que.pop();
now.push_back(temp -> val);
if(temp -> left) que.push(temp -> left);
if(temp -> right) que.push(temp -> right);
}
ans.push_back(now);
}
return ans;
}
};
4、198. 打家劫舍
class Solution {
public:
int rob(vector<int>& nums) {
int ans, a, b;
int size = nums.size();
if(!size) return 0;
else if(size == 1) ans = nums[0];
else if(size == 2) ans = max(nums[0], nums[1]);
else{
a = nums[0]; b = max(nums[0], nums[1]);
for(int i = 2; i < size; i++){
ans = max(b, a + nums[i]);
a = b; b = ans;
}
}
return ans;
}
};
5、62. 不同路径
class Solution {
public:
int uniquePaths(int m, int n) {
swap(n, m);
int dp[n][m];
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(!i || !j){
dp[i][j] = 1;
}else{
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
}
return dp[n - 1][m - 1];
}
};
6、55. 跳跃游戏
class Solution {
public:
bool canJump(vector<int>& nums) {
int r = 0, size = nums.size();
for(int i = 0; i < size - 1; i++){
if(r >= i){
r = max(r, i + nums[i]);
}else{
return false;
}
}
if(r >= size - 1) return true;
return false;
}
};
2021/3/7完结(也就5天没刷题了,手感就严重下滑,看来还是要经常刷题来着)。