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的更多相关文章

  1. LeetCode OJ:Compare Version Numbers(比较版本字符串)

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  2. [LeetCode] 165. Compare Version Numbers 比较版本数

    Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...

  3. 【leetcode】Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...

  4. 【leetcode】Compare Version Numbers(middle)

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  5. ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  6. Java for LeetCode 165 Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  7. Java [Leetcode 165]Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...

  8. Leetcode OJ : Compare Version Numbers Python solution

    Total Accepted: 12400 Total Submissions: 83230     Compare two version numbers version1 and version2 ...

  9. Leetcode 165 Compare Version Numbers

    题意:比较版本号的大小 有点变态,容易犯错 本质是字符串的比较,请注意他的版本号的小数点不知1个,有的会出现01.0.01这样的变态版本号 class Solution { public: int c ...

随机推荐

  1. 鼠标滚轮事件MouseWheel

    其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+,Chrome)中,都提供了 "mousewheel" 事件.但杯具的是 Firefox ...

  2. delphi快捷键

    分类 快捷键 解释 备注 组 件 设 计 类 Escape 选择当前组件容器     Shift + Click 选择多个组件:选择窗体     Tab 选择下一个组件     Shift + Tab ...

  3. 解决Myeclipse 编辑jsp页面卡

    解决Myeclipse 编辑jsp页面卡   编辑一个jsp页面时,如果每输入一下,CPU都100%一下,和大家分项一下. 问题: 当你编辑一个jsp页面时,如果每输入一下,CPU都100%一下,3, ...

  4. POJ 2674

    Linear world Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2448   Accepted: 564 Descr ...

  5. 无法激活服务,因为它不支持 ASP.NET 兼容性

    wcf错误直接上图: 原因: 一般是因为程序添加了启用了AJAX的WCF服务而缺少相关设置出现的错误. 解决方案: 1.webconfig <system.serviceModel> &l ...

  6. 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)

    题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...

  7. js对象小结

    前奏 对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象.js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以 ...

  8. UML类图、接口、包、关系

    一.类图:允许我们去标记静态内容及类之间的关系. 类的基本表示法: 名称 属性(类型,可见性) 方法(参数,返回值)  tip: 显示可见性:Options->Show Visibility 显 ...

  9. QTP10.0安装说明

    QTP10.0 安装手册 注:安装之前检查清理相关注册表:运行->regdit-HKEY_LOCAL_MACHINE->HKEY_LOCAL_MACHINE\SOFTWARE->HK ...

  10. Java 获取本机IP

    import java.io.*; import java.util.*; import java.net.*; public class GetIP { public static void mai ...