QUESTION
Compare two version numbers version1 and version1.
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
1ST TRY
class Solution { public: int compareVersion(string version1, string version2) { int integer1 = 0; int integer2 = 0; int i1 = 0; int i2 = 0; while(i1 < version1.length()) { integer1 = 10*integer1 + version1[i1++] - ‘0‘; if(version1[i1] == ‘.‘) { i1++; break; } } while(i2 < version2.length()) { integer2 = 10*integer2 + version2[i2++] - ‘0‘; if(version2[i2] == ‘.‘) { i2++; break; } } if(integer1 > integer2) return 1; else if(integer1 < integer2) return -1; integer1 = 0; integer2 = 0; while(i1 < version1.length()) { integer1 = 10*integer1 + version1[i1++] - ‘0‘; } while(i2 < version2.length()) { integer2 = 10*integer2 + version2[i2++] - ‘0‘; } if(integer1 > integer2) return 1; else if(integer1 < integer2) return -1; else return 0; } };
Result: Wrong
Input: "1.1", "1.01.0"
Output: -1
Expected: 0
2ND TRY
考虑有不只一个小数点的情况
class Solution { public: int compareVersion(string version1, string version2) { int integer1 = 0; int integer2 = 0; int i1 = 0; int i2 = 0; while(i1 < version1.length() || i2 < version2.length()) { while(i1 < version1.length()) { integer1 = 10*integer1 + version1[i1++] - ‘0‘; if(version1[i1] == ‘.‘) { i1++; break; } } while(i2 < version2.length()) { integer2 = 10*integer2 + version2[i2++] - ‘0‘; if(version2[i2] == ‘.‘) { i2++; break; } } if(integer1 > integer2) return 1; else if(integer1 < integer2) return -1; integer1 = 0; integer2 = 0; } return 0; } };
Result: Accepted
时间: 2024-10-08 10:28:52