[leetcode]15 Compare Version Numbers
来源:互联网 发布:linux搜狗的手写输入 编辑:程序博客网 时间:2024/06/09 22:55
题目链接:https://oj.leetcode.com/problems/compare-version-numbers/
Runtimes:2ms
1、问题
ompare 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
2、分析
本题目是版本比较大小一开始以为只有一个小数点,所以转换成小数进行比较,但是没想版本号也可以是1.200.03.0004,于是重新审视版本号。其一,不止一个点;其二,版本每个局部数字开头可以是0;其三,两个版本号的长度参差不齐。
3、小结
举个栗子:A(1.200.03.4) 与 B(0001.200.3) 比较版本号
从以上分析可以有对应的解题思路,首先比较对应的两个局部版本号可以看出,前3个局部版本号都一样(解题中我们将每个局部版本号转换成为整数再比较);此时需要继续判断A的第四个局部版本号,发现大于零,于是可以得出A的版本号大。假如A的第四个局部版本号等于零,那么可以得出两个版本号一样大。
4、实现
class Solution {public: int changeToInt(string s) { int a = 0; for(int i = 0; i < s.size(); i++) { a = a * 10 + (s[i] - 48); } return a; } int compareVersion(string version1, string version2) { int j = 0; int s1 = 0, s2 = 0; for (int i = 0;; i++) { if (i == version1.size() || version1[i] == '.') { while (j < version2.size() && version2[j] != '.') j++; int a = changeToInt(version1.substr(s1, i - s1)); int b = changeToInt(version2.substr(s2, j - s2)); if (a > b) return 1; else if (a < b) return -1; s1 = i + 1; s2 = j + 1; j++; } if (i >= version1.size()) { if (j >= version2.size()) break; while (j < version2.size() && version2[j] != '.') j++; if (changeToInt(version2.substr(s2, j - s2)) > 0) return -1; break; } if (j >= version2.size()) { i++; if (i >= version1.size()) break; while (i < version1.size() && version1[i] != '.') i++; if (changeToInt(version1.substr(s1, i - s1)) > 0) return 1; break; } } return 0; }};
5、反思
考虑问题不是很周全,首先是对版本号认识不准确,其次是没有考虑对比最后一部分,因为之前以’.’为判断条件,接着也没有考虑到长短不一的情况。编程序能力有待提高。对了,这次又用到了string库函数.
string substr(int pos = 0, int n = npos) const; //返回以pos开始的连续n个字符
- [leetcode]15 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
- LeetCode--Compare Version Numbers
- Compare Version Numbers Leetcode
- Compare Version Numbers --- LeetCode
- hdu 4576 概率dp+滚动数组
- Log4j 2.x的使用
- stream iterator adaptor(istream_iterator, ostream_iterator) demo
- 1016. Phone Bills (25) 模拟(就是很繁琐 尤其是计算费用)
- Ubuntu 14.04 64位下安装Chrome浏览器
- [leetcode]15 Compare Version Numbers
- 扎金花游戏 PHP 实现代码之大小比赛
- SIFT 尺度不变特征变换匹配算法详解
- URAL 1209. 1, 10, 100, 1000... (规律 + 二分)
- LoadRunner教程09:LR自动关联
- 使用grep快速定位代码位置
- 解决火狐浏览器iframe的focus和blur事件触发无效问题
- POJ 3041 Asteroids 最小点覆盖==最大二分匹配
- oracle asm alias 文件别名