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. Excel 若某列包含某个字符则特定列显示特定字符

    今天在写Excel , 有很多重复的数据, 在想 如果 可以像Java  一样 筛选就好了 这样的效果 if ("adj".equals(sheet1.A1)){ sheet1.B ...

  2. html tip实现

    一.介绍before/after CSS中的before和after伪类选择器早在CSS2时就被引入,改属性被所有主流浏览器所支持了.before和after顾名思义,分别指的是伪元素在元素前/后添加 ...

  3. 解决linux下部署科大讯飞时的版本过低问题

    在将项目部     署到阿里云服务器之后,需要将科大讯飞SDK下的libmsc64.so依赖库文件上传至/usr/java/jdk1.8.0_121/jre/lib/amd64路径下   在Windo ...

  4. Delphi系列书籍pdf 118本 网友吐血整理

    第一步:进入官网首页http://bulo.hujiang.com/home/ 第二部:home/替换u/779988/diary/627936/ 来自沪江部落

  5. 初识Hibernate之理解持久化类

         上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射.但是至于其中的一些更加细节的地方并没有 ...

  6. hdu4081(秦始皇的道路系统)

    During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in Ch ...

  7. JQ判断浏览器以及版本

    JQuery 使用jQuery.browser 来判断浏览器,返回值可以为: safari(safari) opera(Opera) msie(IE) mozilla(Firefox). if($.b ...

  8. Python 获取当前脚本文件路径目录

    # -*- coding: cp936 -*- import sys,os # 获取脚本文件的当前路径 def cur_file_dir(): # 获取脚本路径 path = sys.path[0] ...

  9. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  10. 标准输入输出 stdio 流缓冲

    **From : http://www.pixelbeat.org/programming/stdio_buffering/** 我发现找出标准流用的是什么缓冲是一件困难的事. 例如下面这个使用uni ...