2024年2月2日力扣题目训练
- 2024年2月2日力扣题目训练
- 412. Fizz Buzz
- 414. 第三大的数
- 415. 字符串相加
- 129. 求根节点到叶节点数字之和
- 131. 分割回文串
- 65. 有效数字
2024年2月2日力扣题目训练
2024年2月2日第九天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的。
412. Fizz Buzz
链接: Fizz Buzz
难度: 简单
题目:
运行示例:
思路:
这就是一个简单的遍历,只要按要求把特定位置进行修改即可。
代码:
class Solution {
public:vector<string> fizzBuzz(int n) {vector<string> ans;for(int i = 0 ; i < n; i++){if((i+1)%3 == 0 && (i+1)%5 == 0){ans.push_back("FizzBuzz");}else if((i+1)%3 == 0 && (i+1)%5 != 0){ans.push_back("Fizz");}else if((i+1)%3 != 0 && (i+1)%5 == 0){ans.push_back("Buzz");}else{ans.push_back(to_string(i+1));}}return ans;}
};
414. 第三大的数
链接: 第三大的数
难度: 简单
题目:
运行示例:
思路:
求第三大就是排序然后返回位置第三的数字,不过需要删除重复元素,而且sort是从小到大排序的,这些细节都需要注意和解决。
代码:
class Solution {
public:int thirdMax(vector<int>& nums) {sort(nums.begin(),nums.end());auto it = std::unique(nums.begin(), nums.end()); nums.erase(it, nums.end()); for(int i = 0; i < nums.size(); i++){cout<<nums[i]<<endl;}return nums.size() >= 3? nums[nums.size()-3]:nums[nums.size()-1];}
};
415. 字符串相加
链接: 字符串相加
难度: 简单
题目:
运行示例:
思路:
遍历然后按照行列式的方法逐位计算。
代码:
class Solution {
public:string addStrings(string num1, string num2) {string ans="";int i = num1.size()-1;int j = num2.size()-1;int flag = 0;while(i >= 0 || j >= 0 || flag != 0){int x = i >= 0? (num1[i] - '0') : 0;int y = j >= 0? (num2[j] - '0') : 0;int temp = x+ y + flag;if(temp >= 10){temp -= 10;flag = 1;}else{flag = 0;}ans += to_string(temp);i--;j--;}reverse(ans.begin(), ans.end());return ans;}
};
129. 求根节点到叶节点数字之和
链接: 数字之和
难度: 中等
题目:
运行示例:
思路:
这道题求叶子节点数字之和利用深度优先遍历完成。
代码:
class Solution {
public:int dfs(TreeNode* root,int ans){if(root == NULL) return 0;ans = ans * 10 + (root->val);if(root->left == NULL && root->right == NULL ){return ans;}return dfs(root->left,ans) + dfs(root->right,ans);}int sumNumbers(TreeNode* root) {return dfs(root,0);}
};
131. 分割回文串
链接: 分割回文串
难度: 中等
题目:
运行示例:
思路:
分割回文可以看出需要利用回溯,而判断是否为回文可以利用动态规划判断。
代码:
class Solution {
private:vector<vector<string>> ans;vector<string> res;int n;
public:void dfs(string s, int i, vector<vector<bool>> f){if(i == n){ans.push_back(res);return;}for(int j = i; j < n; j++){if(f[i][j]){res.push_back(s.substr(i,j-i+1));dfs(s,j+1,f);res.pop_back();}}}vector<vector<string>> partition(string s) {n = s.size();vector<vector<bool>> f(n,vector<bool>(n,true));for(int i = n -1; i >= 0; i--){for(int j = i + 1; j < n; j++){f[i][j] = (s[i] == s[j]) && f[i+1][j-1];}}dfs(s,0,f);return ans;}
};
65. 有效数字
链接: 有效数字
难度: 困难
题目:
运行示例:
思路:
这道题就是按照要求判断只需根据条件一步一步进行判断即可。
代码:
class Solution {
public:bool isNumber(string s) {bool isNum = false;bool isDecimal = false;bool isE = false;bool isSign = false;for(int i = 0; i < s.size(); i++){char temp = s[i];if(0 <= temp-'0' && temp-'0'<= 9){isNum = true;}else if( temp == '.'){if(isDecimal || (!isNum && i == s.size() - 1) || isE) return false; isDecimal = true;}else if(temp == 'e' || temp == 'E'){if(isE || !isNum || i == s.size() - 1) return false;isE = true;}else if(temp == '-' || temp == '+'){if((i > 0 && s[i-1] != 'e' && s[i-1] != 'E') || i == s.size() - 1) return false;isSign = true;}else{return false;}}return true;}
};