题目
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
01 == 1
1.0.1 > 1
1.0.0 == 1
思路
对version string进行"."split.
利用归并排序的思想对其进行大小对比.
需要注意的是, version string的"."的个数
code
class Solution {
public:
void getVerNum(string s, vector<int>& V) {
int i = 0;
int len = s.length();
while(i < len) {
int n = 0;
bool flag = false;
for(; i < len; i++) {
if(s[i] == '.') {
flag = true;
break;
}
n = n * 10 + (s[i] - '0');
}
if(flag)
i++;
V.push_back(n);
}
}
int comp(const vector<int>& V1, const vector<int>& V2) {
int len1 = V1.size();
int len2 = V2.size();
int i = 0;
while(i < len1 && i < len2) {
if(V1[i] > V2[i]) return 1;
if(V1[i] < V2[i]) return -1;
i++;
}
if(len1 == len2) return 0;
if(i >= len1) {
while(i < len2) {
if(V2[i++] != 0)
return -1;
}
return 0;
}
if(i >= len2) {
while(i < len1) {
if(V1[i++] != 0)
return 1;
}
return 0;
}
return 0;
}
int compareVersion(string version1, string version2) {
vector<int> V1, V2;
getVerNum(version1, V1);
getVerNum(version2, V2);
return comp(V1, V2);
}
};