Leetcode题解(四)
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题解(四)的更多相关文章
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- [LeetCode 题解] Spiral Matrix
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...
- 【LeetCode题解】136_只出现一次的数字
目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...
- 【LeetCode题解】349_两个数组的交集
目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...
- LeetCode:四数之和【18】
LeetCode:四数之和[18] 题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c ...
- LeetCode 题解 593. Valid Square (Medium)
LeetCode 题解 593. Valid Square (Medium) 判断给定的四个点,是否可以组成一个正方形 https://leetcode.com/problems/valid-squa ...
- 【LeetCode题解】二叉树的遍历
我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...
- LeetCode第四天
leetcode 第四天 2018年1月4日 15.(628)Maximum Product of Three Numbers JAVA class Solution { public int max ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
随机推荐
- [LeetCode] 344 Reverse String && 541 Reverse String II
原题地址: 344 Reverse String: https://leetcode.com/problems/reverse-string/description/ 541 Reverse Stri ...
- session写入memcache
1 <?php 2 class MemSession{ 3 private static $handler = null; 4 private static $lifetime = null; ...
- mysql 实验论证 innodb表级锁与行级锁
innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的. 表锁演示(无索引) Session1: mysql> set autocommit=0; mysql> select * ...
- java 读取properties文件总结
一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...
- Mysql配置文件my.cnf详细说明
[表名大小写配置] MySQL在Linux下数据库名.表名.列名.别名大小写规则: 1.数据库名与表名是严格区分大小写 2.表的别名是严格区分大小写 3.列名与列的别名在所有的情况下均是忽略大小 ...
- 认识 Java Message Service
1. Java Message Service : 是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建.发送.接收和读取消息. 实现Java 程序与MQ Server 之间互相 ...
- Beauty Contest 凸包+旋转卡壳法
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27507 Accepted: 8493 D ...
- Django的form表单之文件上传
在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...
- 使用Dapper操作Mysql数据库
首先我想说明一下:相比最原始的ADO.NET,一般都认为封装过一层的ORM性能上会有损耗,但其实在使用中你会发现,当你需要把数据库对象转化为实体模型时,很多所谓的DbHelper其实封装的很低效,反而 ...
- vue 实现 换一换 功能
点击按钮列表页随机获取三个商品并渲染 后台返回的数据为 d为一个数组 数组 arr=[0,1,2]初始值 data:{ list:d, arr:[0,1,2] } 生产随机数 replace:func ...