LeetCode 165: Compare Version Numbers

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

Credits:Special thanks to @ts for adding this problem and creating all test cases.

分析,题目要求比较Version Number,按题目给出的示例,将Version分为Main Version和Sub Version,,如"0.1" Main version为0, SubVersion为1。很容易根据 ” “将字符串”0.1“分为 Main和Sub两个部分。得到如下的代码:

class Solution {public:int getMainVersion(string version){int index = version.find(".");string substr;if (index == -1){substr = version;}substr = version.substr(0, index);return atoi(substr.c_str());}int getSubVersion(string version){int index = version.find(".");string substr;if (index == -1){return 0;}substr = version.substr(index+1, version.size()-index);return atoi(substr.c_str());} int compareVersion(string version1, string version2){int mainVersion1 =getMainVersion(version1);int mainVersion2 = getMainVersion(version2);if (mainVersion1 != mainVersion2){return (mainVersion1 > mainVersion2) ? 1: -1;}int subVersion1 = getSubVersion(version1);int subVersion2 = getSubVersion(version2);if (subVersion1 != subVersion2){return (subVersion1 > subVersion2) ? 1: -1;}return 0;}};很不幸,提交失败,题目的测试用例并不是只有主、从版本号。还有”10.6.5“这样的3段版本号。

所以需要设置一个数组,用于保存版本号各段信息,分离版本号的方法有点类似于Java中的Split方法。

得到要比较的两个版本字符串对应的版本号数组后,将两个版本号数组通过添加0对齐,然后再按位比较。

代码如下:

class Solution {public://通过.号分隔字符串得到版本号数组,如”0.1.2“ 对应<0,1,2>vector<int> getVersion(string version){vector<int> result;if (version.size()<= 0)return result;int lastPos = 0, index;while ((index = version.find(".", lastPos)) != -1){if (lastPos == index){result.push_back(0);}else{string substr = version.substr(lastPos, index-lastPos);result.push_back(atoi(substr.c_str()));}lastPos = index + 1;}string lastStr = version.substr(lastPos);result.push_back(atoi(lastStr.c_str()));return result;}int compareVersion(string version1, string version2){vector<int> v1 = getVersion(version1);vector<int> v2 = getVersion(version2);//将两版本号数组通过加0长度对齐int length = v1.size() – v2.size();for (int i=0; i<abs(length); i++){if (length>0)v2.push_back(0);elsev1.push_back(0);}//逐位比较数组元素for (int index = 0; index<v1.size(); index++){if(v1[index] != v2[index])return (v1[index]>v2[index]) ? 1: -1;}return 0;}};

烦恼忧愁不用追,吃点好的别嫌贵,

LeetCode 165: Compare Version Numbers

相关文章:

你感兴趣的文章:

标签云: