Leetcode: Compare Version Numbers
来源:互联网 发布:金承志 知乎 编辑:程序博客网 时间:2024/04/23 18:00
Compare two version numbers version1 and version1.
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
一个基本点是对于每个分隔开的小版本号,去掉前导零后长度大的版本必定版本高。代码比较简单。
class Solution {public: int compareVersion(string version1, string version2) { if (version1 == version2) { return 0; } string ver1, ver2; size_t start1 = 0; size_t start2 = 0; size_t pos1 = version1.find('.', start1); size_t pos2 = version2.find('.', start2); while (pos1 != string::npos && pos2 != string::npos) { ver1 = version1.substr(start1, pos1 - start1); ver2 = version2.substr(start2, pos2 - start2); int result = cmpVer(ver1, ver2); if (result != 0) { return result; } start1 = pos1 + 1; start2 = pos2 + 1; pos1 = version1.find('.', start1); pos2 = version2.find('.', start2); } string remaining; if (pos1 == string::npos) { ver1 = version1.substr(start1); } else { ver1 = version1.substr(start1, pos1 - start1); remaining = version1.substr(pos1 + 1); } if (pos2 == string::npos) { ver2 = version2.substr(start2); } else { ver2 = version2.substr(start2, pos2 - start2); remaining = version2.substr(pos2 + 1); } int result = cmpVer(ver1, ver2); if (result != 0) { return result; } bool allZero = true; for (int i = 0; i < remaining.size(); ++i) { if (remaining[i] != '0' && remaining[i] != '.') { allZero = false; break; } } if (allZero) { return 0; } return pos1 == string::npos ? -1 : 1; } void trimLeadingZero(string& ver) { size_t i; for (i = 0; i < ver.size(); ++i) { if (ver[i] != '0') { break; } } if (i > 0) { ver = ver.substr(i); } } int cmpVer(string& ver1, string& ver2) { trimLeadingZero(ver1); trimLeadingZero(ver2); if (ver1.size() > ver2.size()) { return 1; } else if (ver1.size() < ver2.size()) { return -1; } else { if (ver1 == ver2) { return 0; } else { return ver1 > ver2 ? 1 : -1; } } }};试了一下Boost的split功能,结果Boost不能用。
0 0
- Leetcode Compare Version Numbers
- [leetcode] Compare Version Numbers
- [leetcode] Compare Version Numbers
- Leetcode: Compare Version Numbers
- 【Leetcode】:Compare Version Numbers
- leetcode:Compare Version Numbers
- [LeetCode]Compare Version Numbers
- [leetCode] Compare Version Numbers
- [leetcode] Compare Version Numbers
- 【Leetcode】Compare Version Numbers
- [LeetCode] Compare Version Numbers
- Leetcode: Compare Version Numbers
- LeetCode-Compare Version Numbers
- leetcode:Compare Version Numbers
- LeetCode--Compare Version Numbers
- Compare Version Numbers Leetcode
- Compare Version Numbers --- LeetCode
- [LeetCode] Compare Version Numbers
- 自己做的私人助手小程序
- Java NIO系列教程(十一) Pipe
- 控制空间光调制器(SLM)的不同控制方法小结
- 58程序管理器的简单UI
- 转 - 微信连WIFI,背后大棋局
- Leetcode: Compare Version Numbers
- 使用pymysql在python中对mysql的增删改查操作(综合)
- 一键执行更新密文密码到指定目录下的所有文件, 附单元测试
- Java NIO系列教程(十二) Java NIO与IO
- 『ANDROID』Android---ListView只显示一行的解决方案
- 黑马程序员使用LinkedList模拟一个堆栈或者队列数据结构。
- VS 2010编译Gh0st 3.6
- 使用放射渐变制作光影效果
- PI API 基础函数(一)