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. C# Winform常见的Editor及其它经验

    1.新建一个自定义Editor,继承自.NET自带的Editor,override某些方法,再附加到属性中: public class MyCollectionEditor : CollectionE ...

  2. javascript中继承(二)-----借用构造函数继承的个人理解

    本人目录如下: 零.寒暄&回顾 一,借用构造函数 二.事件代理 三,call和apply的用法 四.总结 零.寒暄&回顾 上次博客跟大家分享了自己对原型链继承的理解,想看的同学欢迎猛击 ...

  3. .Net 执行 Oracle SQL语句时, 中文变问号

      带中文的Sql语句在.Net调用时, 中文变问号(可使用 SQL Tracker工具跟踪)   问题:       服务器的字符集与客户端的字符集不一致. 解决方法: 1.  查看服务端的字符集: ...

  4. ios 环境配置网址

    http://blog.csdn.net/cwb1128/article/details/18019751

  5. mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决

    前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...

  6. zend studio插件

    1.安装使用Aptana插件(html,css,js代码提示功能) 安装步骤: 1).zend studio->Help->Install New Software->work wi ...

  7. D&F学数据结构系列——AVL树(平衡二叉树)

    AVL树(带有平衡条件的二叉查找树) 定义:一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树. 为什么要使用AVL树(即为什么要给二叉查找树增加平衡条件),已经在我之前的博文中说到过 ...

  8. HDU 2709 Sumsets(递推)

    Sumsets http://acm.hdu.edu.cn/showproblem.php?pid=2709 Problem Description Farmer John commanded his ...

  9. HDU 1392 Surround the Trees (Graham求凸包周长)

    题目链接 题意 : 让你找出最小的凸包周长 . 思路 : 用Graham求出凸包,然后对每条边求长即可. Graham详解 #include <stdio.h> #include < ...

  10. hdu 3094 A tree game 博弈论

    思路: 叶子节点的SG值为0:中间节点的SG值为它的所有子节点的SG值加1 后的异或和. 详见贾志豪神牛的论文:组合游戏略述 ——浅谈SG游戏的若干拓展及变形 代码如下: #include<cs ...