Leetcode13. 罗马数字转整数Leetcode14. 最长公共前缀Leetcode15. 三数之和Leetcode16. 最接近的三数之和Leetcode17. 电话号码的字母组合
简洁易懂讲清原理,讲不清你来打我~
输入字符串,输出对应整数
简单的思路
罗马数字映射整数,遍历罗马字符串,当第i个对应的字符串小于第i+1个,减法,否则加法
精确的定义
RomanToNum是罗马字符映射数字的哈希表
i是字符串遍历到的当前下标
ans是罗马字符串对应的最终整数
class Solution {public:int romanToInt(string s) {unordered_map<char,int>RomanToNum={{'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}};int ans=0;for(int i=0;i<s.size();i++){if(i+1<s.size()&&RomanToNum[s[i+1]]>RomanToNum[s[i]]){ans-=RomanToNum[s[i]];}else{ans+=RomanToNum[s[i]];}}return ans;}
};
简洁易懂讲清原理,讲不清你来打我~
Leetcode14. 最长公共前缀
输入字符串数组,输出字符串为公共前缀
暴力
简单的思路
第一个作为模板,对每个字符数组进行匹配,对于每个字符串,从头到尾匹配,不能匹配或者超出最右时就不再匹配并更新最右边界
精确的定义
mostRight是最长公共前缀到最右的地方
right是两字符串公共前缀最右的地方
i是正在匹配的字符串下标
str1是拿来匹配的模板
class Solution {public:string longestCommonPrefix(vector<string>& strs) {if(strs.size()==0)return "";string str1=strs[0];int mostRight=str1.size();for(int i=1;i<strs.size();i++){int right=-1;while(right+1<strs[i].size()&&right+1<=mostRight&&strs[i][right+1]==str1[right+1]){right++;}mostRight=right;}if(mostRight==-1)return "";return str1.substr(0,mostRight-0+1);}
};
时间复杂度Omn,m是字符串平均长度,n是字符串数量,最差情况每个字符串每个字符都遍历
1
Leetcode15. 三数之和
数组找到3个元素,和为0,输出
详细思路
sort,先找一个i,剩余两个从i右边开始,用双指针靠近找出所有满足的三元组,当i和i-1,left和left-1,right和right+1相同时continue;
精确的定义
i第一个元素下标
left第二个元素下标
right第三个元素下标
ans所有满足的数组
class Solution {public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>>ans;if(nums.size()<3)return ans;sort(nums.begin(),nums.end());for(int i=0;i<nums.size()-2;i++){if(i-1>=0&&nums[i]==nums[i-1])continue;int left=i+1,right=nums.size()-1;while(left<right){if(left-1>=i+1&&nums[left]==nums[left-1]){left++;continue;}else if(right+1<=nums.size()-1&&nums[right]==nums[right+1]){right--;continue;}if(nums[left]+nums[right]+nums[i]==0){ans.push_back({nums[i],nums[left],nums[right]});left++;right--;}else if(nums[left]+nums[right]+nums[i]<0)left++;else if(nums[left]+nums[right]+nums[i]>0)right--;}}return ans;}
};
踩过的坑
去重
if(i-1>=0&&nums[i]==nums[i-1])continue;if(left-1>=i+1&&nums[left]==nums[left-1]){left++;continue;}else if(right+1<=nums.size()-1&&nums[right]==nums[right+1]){right--;continue;}
Leetcode16. 最接近的三数之和
详细的思路
sort,对于每一个第一个元素,leftright两侧向中间逼近,保存最接近的和,绝对值更小的和要保存,大于的话right–小于的话left++
精确的定义
i第一个元素
left第二个元素
right第三个元素
ans最接近的和
class Solution {public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int ans=0x3f3f3f3f;for(int i=0;i<nums.size()-2;i++){int left=i+1,right=nums.size()-1;while(left<right){ans=abs(nums[i]+nums[left]+nums[right]-target)<abs(ans-target)?nums[i]+nums[left]+nums[right]:ans;if(nums[i]+nums[left]+nums[right]==target)return target;else if(nums[i]+nums[left]+nums[right]<target)left++;else if(nums[i]+nums[left]+nums[right]>target)right--;}}return ans;}
};
踩过的坑
int ans=0x3f3f3f3f;
Leetcode17. 电话号码的字母组合
详细的思路
哈希表映射数字对应的字符串,从第0层开始,找到该层数字对应的字符串,遍历字符串,将第一个字符放到数组并进入下一层,或者不要这个字符而尝试第二个字符,当层数=最后一个数字也用完了就结束
精确的定义
numToStr哈希表数字映射字符串
depth递归层数,也是处理第几个数字
str该层对应的字符串
c字符串中的字符
ans1某一种组合
ans所有组合
class Solution {public:unordered_map<char,string>numToStr={{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};vector<string> letterCombinations(string digits) {if(digits.size()==0)return {};vector<string>ans;string ans1;dfs(digits,ans,ans1,0);return ans;}void dfs(const string&digits,vector<string>&ans,string&ans1,int depth){if(depth==digits.size()){ans.push_back(ans1);return ;}string str=numToStr[digits[depth]];for(auto c:str){ans1.push_back(c);dfs(digits,ans,ans1,depth+1);ans1.pop_back();}}
};
喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~
Leetcode13. 罗马数字转整数Leetcode14. 最长公共前缀Leetcode15. 三数之和Leetcode16. 最接近的三数之和Leetcode17. 电话号码的字母组合相关推荐
- LeetCode 13罗马数字转整数14最长公共前缀
罗马数字转整数 上一题是整数转罗马数字,这题是罗马数字转整数.虽然是简单题,但我感觉其实有点烦. 上一次是数字转字符,这次是字符转数字,总的来说大体思想还是差不多的. 首先整个字符串可能是这样构造的: ...
- LeetCode14.最长公共前缀 JavaScript
LeetCode14.最长公共前缀 JavaScript 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串"". 示例 1: 输入: [" ...
- LeetCode14最长公共前缀
未经博主同意,禁止瞎JB转载. LeetCode14最长公共前缀 https://leetcode-cn.com/problems/longest-common-prefix/description/ ...
- LeetCode14 最长公共前缀
leetcode 14 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:strs = ["flo ...
- LeetCode-14 最长公共前缀
文章目录 题目描述 我的解法 反思1 优化1 反思2 优化2 其他思路 总结 Github 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "&q ...
- leetcode14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...
- LeetCode-14.最长公共前缀(字符串的erase()函数)
题目内容 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-prefix/ 编写一个函数来查找字符串数组中的最长公共 ...
- Leetcode14:最长公共前缀【c语言实现】
写这个题的时候遇到了挺多的问题 首先就是拿到这个题的时候就看不懂的函数的参数了 就像是这样,char ** ????黑人问号,然后就去查资料补了一下知识漏洞.整理了一篇博客.各位有必要的话可以看一下. ...
- LeetCode13.罗马数字转整数 JavaScript
LeetCode13.罗马数字转整数 JavaScript 罗马数字包含以下七种字符: ·I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 ...
- 最长公共前缀—leetcode14
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...
最新文章
- python3 lambda表达式
- python如何爬虫网页数据-python网络爬虫爬取网页内容
- Sublime Text 2快捷键大全
- java源文件扩展名_java源文件名的后缀是什么?
- 合肥工业大学计算机学院王院长,王青山(合肥工业大学教授)_百度百科
- Jersey和Spring Boot入门
- 中文select 加载完成后再排序
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_04.入门程序之搭建开发环境
- nginx proxy_pass和rewrite
- 财务分析真不难!无需代码,一个模板直接复用,碾压上千Excel表
- jquery div点击展开,点击收起,点击除了该div外任何地方,该div隐藏
- 5分钟在大米云上基于WordPress搭建一个博客
- CRM 安装不规范,亲人两行泪
- 手把手教你做一个网页
- 【Java分享客栈】SpringBoot线程池参数搜一堆资料还是不会配,我花一天测试换你此生明白。
- ctfshow 网络迷踪-来点福利
- balsamiq原型工具
- 统计打印字符串arg中每个字符出现的次数
- B. Shifting Sort (思维)
- 使用ExcelJs导出表格设置样式、添加边框
热门文章
- 什么是视频比特率:完整指南
- Niagara_Advanced内容示例 2.3 Spawn Particles From Another Emitter
- 360Replugin插件Activity横屏
- 跳过selenium检测爬取淘宝直通车
- 以数据为中心的路由协议_腰部零售企业如何以数据中台为中心,加速数字化落地...
- vue项目使用 Recorder.js 实现录音功能
- win7 android双系统,真正的安卓Windows双系统,RemixOS Windows共存系统安装+附带RO......
- 计算机专用英语词汇1500词
- PMP项目管理的就业前景
- 苹果中国全系降价:iphone最高降500元,用户可退差价