leetcode第12、13、14、15题(C++)

原题链接:12. 整数转罗马数字 - 力扣(LeetCode)

这其实是个暴力算法,但是简单易懂,可以看看,不难,秒了

复制代码
class Solution {
public:
    string intToRoman(int num) {
        string qian[]={"","M","MM","MMM"};
        string bai[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
        string shi[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
        string ge[]={"","I","II","III","IV","V","VI","VII","VIII","IX"};
        int num1=num/1000;
        int num2=(num%1000)/100;
        int num3=(num%100)/10;
        int num4=num%10;
        string result=qian[num1]+bai[num2]+shi[num3]+ge[num4];
        return result;
    }
};

原题链接:13. 罗马数字转整数 - 力扣(LeetCode)

这题跟刚刚那题相反,不过也不难,使用unordered_map直接秒了

复制代码
class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char,int> map={//创造一个无序map容器,这个很好用,推荐各位学C++的朋友学习
            {'I',1},
            {'V',5},
            {'X',10},
            {'L',50},
            {'C',100},
            {'D',500},
            {'M',1000}
        };
        int result=0;
        int n=s.length();
        for(int i=0;i<n;i++){
            if(i+1<n&&map[s[i]]<map[s[i+1]]){
                result-=map[s[i]];//按照规则,如果小于后者要减去
            }
            else{
                result+=map[s[i]];
            }
        }
        return result;
    }
};

原题链接:14. 最长公共前缀 - 力扣(LeetCode)

复制代码
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";//如果为空则返回空
        for(int i=0;i<strs[0].size();i++){//直接以第一个字符串为基准开始比较,简单粗暴
            char c=strs[0][i];
            for(int j=1;j<strs.size();j++){
                if(i>=strs[j].size()||strs[j][i]!=c){
                    return strs[0].substr(0,i);//如果某个字符串长度不够,或者字符不匹配,就返回已匹配的部分
                }
            }
        }
        return strs[0];//如果第一个字符串和其他的字符串前缀重合,则输出第一个字符串
    }
};

原题链接:15. 三数之和 - 力扣(LeetCode)

复制代码
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;//容器里边放容器
        int n=nums.size();
        if(n<3) return result;//数据数量小于3,直接返回空
        sort(nums.begin(),nums.end());//对数据进行排序
        for(int i=0;i<n-2;i++){
            if(i>0 && nums[i]==nums[i-1]) continue;
            int left=i+1;//以i为基准,找到另外两个符合条件的数据
            int right=n-1;
            while(left<right){
                int sum=nums[i]+nums[left]+nums[right];//计算总和
                if(sum<0){//总和小了,就找更大的
                    left++;
                }else if(sum>0){//总和大看,就找更小的
                    right--;
                }else{//符合条件就装进容器
                    result.push_back({nums[i],nums[left],nums[right]});
                    while(left<right && nums[left]==nums[left+1]) left++;//避免重复
                    while(left<right && nums[right]==nums[right-1]) right--;
                    left++;//继续匹配
                    right--;
                }
            }
        }
        return result;
    }
};
相关推荐
同勉共进15 分钟前
记一例 vibe coding + gcc bug 导致的线程池死锁问题
c++·线程池·gcc·死锁·vibe coding
我叫洋洋18 分钟前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx1 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
王维同学4 小时前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
战族狼魂5 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一5 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH5 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱5 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
脱胎换骨-军哥5 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
香辣牛肉饭6 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划