leetcode:Compare Version Numbers
Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
分析:题意为 比较两个版本数字version1和version2,值得注意的是.并不是代表小数点,例如:2.5表示第二个一级第五个二级版本
思路:可以进行逐位比较,把字符串转化成整型。
注意考虑test case:0.1 与 0.01 结果是:0.1>0.01
代码如下:
class Solution {
public:
int compareVersion(string version1, string version2) {
int v1, v2;
int t1 = 0, t2 = 0;
while (t1 < version1.length() || t2 < version2.length()) {
v1 = 0;
while (t1 < version1.length()) {
if (version1[t1] == '.') {
++t1;
break;
}
v1 = v1 * 10 + (version1[t1] - '0');
++t1;
}
v2 = 0;
while (t2 < version2.length()) {
if (version2[t2] == '.') {
++t2;
break;
}
v2 = v2 * 10 + (version2[t2] - '0');
++t2;
}
if (v1 > v2) return 1;
if (v1 < v2) return -1;
}
return 0;
}
};
其他解法:
class Solution {
public:
int compareVersion(string version1, string version2) {
const char *p1 = version1.c_str()-1;
const char *p2 = version2.c_str()-1;
do{
int v1 = 0, v2 =0;
if (p1){
v1=atoi(p1+1);
p1 = strchr(p1+1, '.');
}
if (p2){
v2=atoi(p2+1);
p2 = strchr(p2+1, '.');
}
if (v1<v2) return -1;
if (v2<v1) return 1;
}while(p1||p2);
return 0;
}
};
或:
class Solution {
public:
int compareVersion(string version1, string version2) {
int n = version1.size(), m = version2.size();
for (int i = 0, j = 0; i < n || j < m; i++, j++) {
size_t p = 0;
int a = ((i >= n) ? 0 : stoi(version1.substr(i), &p));
i += p;
int b = ((j >= m) ? 0 : stoi(version2.substr(j), &p));
j += p;
if (a > b) return 1;
if (a < b) return -1;
}
return 0;
}
};
或:
class Solution {
public:
int compareVersion(string version1, string version2) {
istringstream iss1(version1), iss2(version2);
string token1, token2;
while(!iss1.eof() || !iss2.eof()) {
getline(iss1, token1, '.'); getline(iss2, token2, '.');
if(stoi(token1) > stoi(token2)) return 1;
if(stoi(token1) < stoi(token2)) return -1;
token1 = token2 = "0";
}
return 0;
}
};
leetcode:Compare Version Numbers的更多相关文章
- LeetCode OJ:Compare Version Numbers(比较版本字符串)
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- [LeetCode] 165. Compare Version Numbers 比较版本数
Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...
- 【leetcode】Compare Version Numbers
题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...
- 【leetcode】Compare Version Numbers(middle)
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- Java for LeetCode 165 Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- Java [Leetcode 165]Compare Version Numbers
题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...
- Leetcode OJ : Compare Version Numbers Python solution
Total Accepted: 12400 Total Submissions: 83230 Compare two version numbers version1 and version2 ...
- Leetcode 165 Compare Version Numbers
题意:比较版本号的大小 有点变态,容易犯错 本质是字符串的比较,请注意他的版本号的小数点不知1个,有的会出现01.0.01这样的变态版本号 class Solution { public: int c ...
随机推荐
- 鼠标滚轮事件MouseWheel
其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+,Chrome)中,都提供了 "mousewheel" 事件.但杯具的是 Firefox ...
- delphi快捷键
分类 快捷键 解释 备注 组 件 设 计 类 Escape 选择当前组件容器 Shift + Click 选择多个组件:选择窗体 Tab 选择下一个组件 Shift + Tab ...
- 解决Myeclipse 编辑jsp页面卡
解决Myeclipse 编辑jsp页面卡 编辑一个jsp页面时,如果每输入一下,CPU都100%一下,和大家分项一下. 问题: 当你编辑一个jsp页面时,如果每输入一下,CPU都100%一下,3, ...
- POJ 2674
Linear world Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2448 Accepted: 564 Descr ...
- 无法激活服务,因为它不支持 ASP.NET 兼容性
wcf错误直接上图: 原因: 一般是因为程序添加了启用了AJAX的WCF服务而缺少相关设置出现的错误. 解决方案: 1.webconfig <system.serviceModel> &l ...
- 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)
题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...
- js对象小结
前奏 对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象.js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以 ...
- UML类图、接口、包、关系
一.类图:允许我们去标记静态内容及类之间的关系. 类的基本表示法: 名称 属性(类型,可见性) 方法(参数,返回值) tip: 显示可见性:Options->Show Visibility 显 ...
- QTP10.0安装说明
QTP10.0 安装手册 注:安装之前检查清理相关注册表:运行->regdit-HKEY_LOCAL_MACHINE->HKEY_LOCAL_MACHINE\SOFTWARE->HK ...
- Java 获取本机IP
import java.io.*; import java.util.*; import java.net.*; public class GetIP { public static void mai ...