力扣题目训练(9)

2024年2月2日力扣题目训练

  • 2024年2月2日力扣题目训练
    • [412. Fizz Buzz](#412. Fizz Buzz)
    • [414. 第三大的数](#414. 第三大的数)
    • [415. 字符串相加](#415. 字符串相加)
    • [129. 求根节点到叶节点数字之和](#129. 求根节点到叶节点数字之和)
    • [131. 分割回文串](#131. 分割回文串)
    • [65. 有效数字](#65. 有效数字)

2024年2月2日力扣题目训练

2024年2月2日第九天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的。

412. Fizz Buzz

链接: Fizz Buzz
难度: 简单
题目:

运行示例:

思路:

这就是一个简单的遍历,只要按要求把特定位置进行修改即可。
代码:

javascript 复制代码
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是从小到大排序的,这些细节都需要注意和解决。
代码:

javascript 复制代码
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. 字符串相加

链接: 字符串相加
难度: 简单
题目:

运行示例:

思路:

遍历然后按照行列式的方法逐位计算。
代码:

javascript 复制代码
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. 求根节点到叶节点数字之和

链接: 数字之和
难度: 中等
题目:

运行示例:

思路:

这道题求叶子节点数字之和利用深度优先遍历完成。
代码:

javascript 复制代码
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. 分割回文串

链接: 分割回文串
难度: 中等
题目:

运行示例:

思路:

分割回文可以看出需要利用回溯,而判断是否为回文可以利用动态规划判断。
代码:

javascript 复制代码
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. 有效数字

链接: 有效数字
难度: 困难
题目:

运行示例:

思路:

这道题就是按照要求判断只需根据条件一步一步进行判断即可。
代码:

javascript 复制代码
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;
    }
};
相关推荐
我是谁??5 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
小码农<^_^>7 分钟前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~9 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
软工菜鸡35 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生37 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
发霉的闲鱼39 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt41 分钟前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
xiaoxiao涛1 小时前
协程6 --- HOOK
c++·协程
AI视觉网奇1 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn
JingHongB1 小时前
代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础
算法·深度优先·图论