12/13、Integer to Roman/Roman to Integer

题目

罗马数字规则:

符号 I V X L C D M
数字 1 5 10 50 100 500 1000

代码如下:

 class Solution {
public:
string intToRoman(int num) {
string str;
string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int value[]= {,,,, , , , , , , , , };
for(int i=;num!=;++i)
{
while(num>=value[i])
{
num-=value[i];
str+=symbol[i];
}
}
return str; }
};

举一反三,如果是将罗马数字转换为整数呢。思路是一样。参考代码如下:

 class Solution {
public:
int romanToInt(string s) {
int ret = toNumber(s[]);
for (int i = ; i < s.length(); i++) {
if (toNumber(s[i - ]) < toNumber(s[i])) {
ret += toNumber(s[i]) - * toNumber(s[i - ]);
} else {
ret += toNumber(s[i]);
}
}
return ret;
} int toNumber(char ch) {
switch (ch) {
case 'I': return ;
case 'V': return ;
case 'X': return ;
case 'L': return ;
case 'C': return ;
case 'D': return ;
case 'M': return ;
}
return ;
}
};

-------------------------------------------------------------------------------------------------分割线----------------------------------------------------------------------------

14、Longest Common Prefix

题目

这道题目比较简单,参考代码如下:

 class Solution {
public:
string longestCommonPrefix(vector<string> &strs) {
int length = strs.size();
string result="";
int index=,i;
char temp;
bool flag=true;
if( == length)
return "";
while(flag)
{
temp=strs[][index]; for (i=;i<length;i++)
{
if (index>=strs[i].length() ||strs[i][index] != temp)
{
flag=false;
break;
} }
if(i==length)
result += temp;
index++; }
return result;
}
};

----------------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------

15、3Sum

题目

这道题目和Leetcode第1题很相似,第1题中是对排序数组进行收尾夹逼求解。因此在这一题中,我们任然也可以采用收尾夹逼的准则去求解。在每次求解的过程中,先固定好一个数c,然后采用夹逼方法判断a+b ?= -c,如果不等且a+b<-c,a右移,相反的,b左移;

题目要求不能有重复的解。为了避免重复解,在每次固定c值时,如果该值之前已经做过判断,直接跳过。

代码如下:

 class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function vector<vector<int> > ret;
ret.clear();
sort(num.begin(),num.end());
for(int i=; i!=num.size();i++){
if(i > && num[i]==num[i-])
continue;
int j,k;
j=i+;
k=num.size()-;
while(j<k){
if(j>i+&&num[j]==num[j-]){
j++;
continue;
}
if(k<num.size()-&& num[k]==num[k+]){
k--;
continue;
}
int sum = num[i] + num[j] + num[k];
if(sum>){
k--;
}else if(sum<){
j++;
}else{
vector<int> tmp;
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
ret.push_back(tmp);
j++;
}
}
}
return ret; }
};

算法的时间复杂度是:排序O(nlogn)和遍历O(n*n).

--------------------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------

16、3Sum Closest

题目

这题和15题是一个意思,都是采用先排序,再首尾夹逼。代码如下:

 class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(num.begin(), num.end()); int ret;
bool first = true; for(int i = ; i < num.size(); i++)
{
int j = i + ;
int k = num.size() - ; while(j < k)
{
int sum = num[i] + num[j] + num[k];
if (first)
{
ret = sum;
first = false;
}
else
{
if (abs(sum - target) < abs(ret - target))
ret = sum;
} if (ret == target)
return ret; if (sum > target)
k--;
else
j++;
}
} return ret;
}
};

Leetcode题解(四)的更多相关文章

  1. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  2. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

  3. [LeetCode 题解] Spiral Matrix

    前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...

  4. 【LeetCode题解】136_只出现一次的数字

    目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...

  5. 【LeetCode题解】349_两个数组的交集

    目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...

  6. LeetCode:四数之和【18】

    LeetCode:四数之和[18] 题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c ...

  7. LeetCode 题解 593. Valid Square (Medium)

    LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...

  8. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...

  9. LeetCode第四天

    leetcode 第四天 2018年1月4日 15.(628)Maximum Product of Three Numbers JAVA class Solution { public int max ...

  10. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)

    目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...

随机推荐

  1. Java开发规范总结(两周至少看一次)

     Service / DAO 层方法命名规约: 1 ) 获取单个对象的方法用 get 做前缀.2 ) 获取多个对象的方法用 list 做前缀.3 ) 获取统计值的方法用 count 做前缀.4 ) 插 ...

  2. Excel的实用函数

    在介绍Excel函数前先说明两个概念:公式和函数. 公式:由用户自行设计对工作表进行计算和处理的计算式,以等号"="开始,其内部可以包括函数.引用.运算符和常量. 函数:即是预先定 ...

  3. Qt中的坐标系统

    Qt使用统一的坐标系统来定位窗口部件的位置和大小. 以屏幕的左上角为原点即(0, 0)点,从左向右为x轴正向,从上向下为y轴正向,这整个屏幕的坐标系统就用来定位顶层窗口: 此外,窗口内部也有自己的坐标 ...

  4. 【2016美团】浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术

    A.非对称加密技术 B.对称加密技术 C.散列(哈希)算法 D.数字证书 答案:ABCD HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数 ...

  5. 在CentOS6上配置MHA过程全记录

    在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...

  6. PHP MYSQL 搜索周边坐标,并计算两个点之间的距离

    搜索附近地点,例如,坐标(39.91, 116.37)附近500米内的人,首先算出“给定坐标附近500米”这个范围的坐标范围. 虽然它是个圆,但我们可以先求出该圆的外接正方形,然后拿正方形的经纬度范围 ...

  7. 自适应 Tab 宽度可以滑动文字逐渐变色的 TabLayout(仿今日头条顶部导航)

    TabLayout相信大家都用过,2015年Google大会上发布了新的Android Support Design库里面包含了很多新的控件,其中就包含TabLayout,它可以配合ViewPager ...

  8. Hadoop(三)手把手教你搭建Hadoop全分布式集群

    前言 上一篇介绍了伪分布式集群的搭建,其实在我们的生产环境中我们肯定不是使用只有一台服务器的伪分布式集群当中的.接下来我将给大家分享一下全分布式集群的搭建! 其实搭建最基本的全分布式集群和伪分布式集群 ...

  9. mysql导出数据库和恢复数据库代码

    mysql导出数据库和备份数据库 用mysqldump 命令行 命令格式 mysqldump -u 用户名 -p  数据库名 > 数据库名.sql 范例: mysqldump -uroot -p ...

  10. JS在可编辑的div中的光标位置插入内容或表情

    <input type="button" value="插入字符" onclick="document.getElementById('test ...