本题首先想到的是split方法,但是c++里面没有提供,所以转java写了。
注意下对于长度不同的字符串判断方法,这样写比较优雅。
class Solution {
public int compareVersion(String version1, String version2) {
String[] v1= version1.split("\\.");
String[] v2= version2.split("\\.");
for(int i=0;i<v1.length||i<v2.length;i++){
int c1=0,c2=0;
if(i<v1.length){
c1=Integer.parseInt(v1[i]);
}
if(i<v2.length){
c2=Integer.parseInt(v2[i]);
}
if(c1>c2)return 1;
if(c2>c1) return -1;
}
return 0;
}
}
如果使用c++来写的话,应该是老老实实的双指针遍历字符串,并且不能使用int存储,虽然题目中保证32位,但是会溢出,经典。
class Solution {
public:
int compareVersion(string version1, string version2) {
int l=0, r=0;
while(l<version1.size() || r<version2.size()){
long int c1=0;
for(;l<version1.size();l++){
if(version1[l]=='.') break;
c1=c1*10+version1[l]-'0';
}
l++;
long int c2=0;
for(;r<version2.size();r++){
if(version2[r]=='.') break;
c2=c2*10+version2[r]-'0';
}
r++;
if(c1>c2) return 1;
if(c2>c1) return -1;
}
return 0;
}
};