原题地址:https://leetcode-cn.com/problems/compare-version-numbers/description/
题目描述:
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
示例 1:
输入: version1 = "0.1", version2 = "1.1"
输出: -1
示例 2:
输入: version1 = "1.0.1", version2 = "1"
输出: 1
示例 3:
输入: version1 = "7.5.2.4", version2 = "7.5.3"
输出: -1
解题方案:
开始的思路是,一个一个进行字符的比较。后来发现,这种方式需要考的情况太多了,领扣给出的样例有很奇怪的数据,比较的麻烦。在一个问题上困扰太多,要及时进行调整,不要过于固执,需转变思维,化繁为简。。。
之后,选择将字符串转化为整数再进行比较。
代码:
class Solution {
public:
int compareVersion(string version1, string version2) {
int val1, val2;
int idx1 = 0, idx2 = 0;
while (idx1 < version1.length() || idx2 < version2.length()) {
val1 = 0;
while (idx1 < version1.length()) {
if (version1[idx1] == '.') {
++idx1;
break;
}
val1 = val1 * 10 + (version1[idx1] - '0');
idx1 ++;
}
val2 = 0;
while (idx2 < version2.length()) {
if (version2[idx2] == '.') {
idx2 ++;
break;
}
val2 = val2 * 10 + (version2[idx2] - '0');
idx2 ++;
}
if (val1 > val2) return 1;
if (val1 < val2) return -1;
}
return 0;
}
};