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

张开发
2026/4/9 16:50:23 15 分钟阅读

分享文章

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 num1num/1000; int num2(num%1000)/100; int num3(num%100)/10; int num4num%10; string resultqian[num1]bai[num2]shi[num3]ge[num4]; return result; } };原题链接13. 罗马数字转整数 - 力扣LeetCode这题跟刚刚那题相反不过也不难使用unordered_map直接秒了class Solution { public: int romanToInt(string s) { unordered_mapchar,int map{//创造一个无序map容器这个很好用推荐各位学C的朋友学习 {I,1}, {V,5}, {X,10}, {L,50}, {C,100}, {D,500}, {M,1000} }; int result0; int ns.length(); for(int i0;in;i){ if(i1nmap[s[i]]map[s[i1]]){ result-map[s[i]];//按照规则如果小于后者要减去 } else{ resultmap[s[i]]; } } return result; } };原题链接14. 最长公共前缀 - 力扣LeetCodeclass Solution { public: string longestCommonPrefix(vectorstring strs) { if(strs.empty()) return ;//如果为空则返回空 for(int i0;istrs[0].size();i){//直接以第一个字符串为基准开始比较简单粗暴 char cstrs[0][i]; for(int j1;jstrs.size();j){ if(istrs[j].size()||strs[j][i]!c){ return strs[0].substr(0,i);//如果某个字符串长度不够或者字符不匹配就返回已匹配的部分 } } } return strs[0];//如果第一个字符串和其他的字符串前缀重合则输出第一个字符串 } };原题链接15. 三数之和 - 力扣LeetCodeclass Solution { public: vectorvectorint threeSum(vectorint nums) { vectorvectorint result;//容器里边放容器 int nnums.size(); if(n3) return result;//数据数量小于3直接返回空 sort(nums.begin(),nums.end());//对数据进行排序 for(int i0;in-2;i){ if(i0 nums[i]nums[i-1]) continue; int lefti1;//以i为基准找到另外两个符合条件的数据 int rightn-1; while(leftright){ int sumnums[i]nums[left]nums[right];//计算总和 if(sum0){//总和小了就找更大的 left; }else if(sum0){//总和大看就找更小的 right--; }else{//符合条件就装进容器 result.push_back({nums[i],nums[left],nums[right]}); while(leftright nums[left]nums[left1]) left;//避免重复 while(leftright nums[right]nums[right-1]) right--; left;//继续匹配 right--; } } } return result; } };

更多文章