比较两个版本号 version1 和 version2。
如果 *version1* > *version2* 返回
1,如果 *version1* < *version2*
返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 .
字符。
.
字符不代表小数点,而是用于分隔数字序列。
例如,2.5
不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为
0。例如,版本号 3.4
的第一级(大版本)和第二级(小版本)修订号分别为
3 和 4。其第三级和第四级修订号均为
0。
示例 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
示例 4:
输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
示例 5:
输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。
提示:
.)
分隔的数字字符串组成。这个数字字符串可能有前导零。"19.8.3.17.5.01.0.0.4.0.0.0.0.0.0.0.0.0.0.0.0.0.00.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000"
"19.8.3.17.5.01.0.0.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0000.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.000000"int compareVersion(string version1, string version2) {
int sum1 = 0, sum2 = 0;
int len1 = version1.size(),len2 = version2.size();
int index1 = 0,index2 = 0;
while(index1 < len1 || index2 < len2){
int temp = 0;
while(index1 < len1 && version1[index1] != '.'){
//if(version1[index1] ==0 && temp == 0) index1++;
//if(version1[index1] ==0 && temp != 0) temp = temp*10;
if(version1[index1] == 0) temp = temp*10;
// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
//if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
if(version1[index1] !=0) temp = temp*10 + version1[index1]-'0';
index1++;
}
sum1 = sum1*10 +temp;
temp = 0;
while(index2 < len2 && version2[index2] != '.'){
//if(version1[index1] ==0 && temp == 0) index1++;
//if(version1[index1] ==0 && temp != 0) temp = temp*10;
if(version2[index2] == 0) temp = temp*10;
// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
//if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
if(version2[index2] !=0) temp = temp*10 + version2[index2]-'0';
index2++;
}
sum2 = sum2*10 +temp;
//cout<<sum1<<" "<<sum2<<endl;
index1++;
index2++;
if(sum1 > sum2) return 1;
if(sum1 < sum2) return -1;
}
return 0;
}执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.2 MB, 在所有 C++ 提交中击败了100.00%的用户
int compareVersion(string version1, string version2) {
int sum1 = 0, sum2 = 0;
int len1 = version1.size(), len2 = version2.size();
int index1 = 0, index2 = 0;
while (index1 < len1 || index2 < len2) {
int temp = 0;
while (index1 < len1 && version1[index1] != '.') {
//if(version1[index1] ==0 && temp == 0) index1++;
//if(version1[index1] ==0 && temp != 0) temp = temp*10;
if (version1[index1] == 0) temp = temp * 10;
// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
//if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
if (version1[index1] != 0) temp = temp * 10 + version1[index1] - '0';
index1++;
}
sum1 = sum1 * 10 + temp;
temp = 0;
while (index2 < len2 && version2[index2] != '.') {
//if(version1[index1] ==0 && temp == 0) index1++;
//if(version1[index1] ==0 && temp != 0) temp = temp*10;
if (version2[index2] == 0) temp = temp * 10;
// if(version1[index1] !=0 && temp != 0) temp = temp*10 + version1[index1]-'0';
//if(version1[index1] !=0 && temp == 0) temp = version1[index1] - '0';
if (version2[index2] != 0) temp = temp * 10 + version2[index2] - '0';
index2++;
}
sum2 = sum2 * 10 + temp;
cout<<sum1<<" "<<sum2<<endl;
index1++;
index2++;
if (sum1 > sum2) return 1;
if (sum1 < sum2) return -1;
sum1 = 0;//这是关键
sum2 = 0;
}
return 0;
}执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.3 MB, 在所有 C++ 提交中击败了100.00%的用户
int compareVersion(string version1, string version2) {
int sum1 = 0, sum2 = 0;
int len1 = version1.size(), len2 = version2.size();
int index1 = 0, index2 = 0;
while (index1 < len1 || index2 < len2) {
sum1 = 0;
sum2 = 0;
while (index1 < len1 && version1[index1] != '.') {
sum1 = sum1 * 10 + version1[index1] - '0';
index1++;
}
while (index2 < len2 && version2[index2] != '.') {
sum2 = sum2 * 10 + version2[index2] - '0';
index2++;
}
index1++;
index2++;
//cout << sum1 << " " << sum2 << endl;
if (sum1 > sum2) return 1;
if (sum1 < sum2) return -1;
}
return 0;
}