您的位置:首页 > 其它

Compare Version Numbers

2015-10-06 09:32 351 查看
原题链接

题目

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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: