题目
https://leetcode-cn.com/problems/compare-version-numbers/submissions/
我的思路
把string类型转换成int数组,每个元素存储每个修订号,再逐个比较。
我的代码
class Solution {
public:
int compareVersion(string version1, string version2) {
vector<int> v1,v2;
int x=0;
for(int i=0;i<version1.size();i++){
if(version1[i]=='.'){
v1.push_back(x);
x=0;
}else{
x=x*10+version1[i]-'0';
}
}
v1.push_back(x);
x=0;
for(int i=0;i<version2.size();i++){
if(version2[i]=='.'){
v2.push_back(x);
x=0;
}else{
x=x*10+version2[i]-'0';
}
}
v2.push_back(x);
int len1=v1.size(),len2=v2.size();
for(int i=0;i<len1&&i<len2;i++){
if(v1[i]>v2[i])
return 1;
else if(v1[i]<v2[i])
return -1;
}
if(len1>len2){
for(int i=len2;i<len1;i++){
if(v1[i]!=0)
return 1;
}
}else if(len2>len1){
for(int i=len1;i<len2;i++){
if(v2[i]!=0)
return -1;
}
}
return 0;
}
};
简化版代码(去掉了数组长度不等时比较数组长度的部分)
class Solution {
public:
int compareVersion(string version1, string version2) {
vector<int> v1,v2;
int x=0;
for(int i=0;i<version1.size();i++){
if(version1[i]=='.'){
v1.push_back(x);
x=0;
}else{
x=x*10+version1[i]-'0';
}
}
v1.push_back(x);
x=0;
for(int i=0;i<version2.size();i++){
if(version2[i]=='.'){
v2.push_back(x);
x=0;
}else{
x=x*10+version2[i]-'0';
}
}
v2.push_back(x);
int len1=v1.size(),len2=v2.size();
for(int i=0;i<len1||i<len2;i++){
int num1=0,num2=0; //如果数组长度超出了就把这位数当作0
if(i<len1)
num1=v1[i];
if(i<len2)
num2=v2[i];
if(num1>num2)
return 1;
else if(num2>num1)
return -1;
}
return 0;
}
};
题解思路
双指针,不用存储分割后的修订号,在分割版本号的同时比较修订号
题解代码
class Solution {
public:
int compareVersion(string version1, string version2) {
int i=0,j=0;
while(i<version1.size()||j<version2.size()){
int x=0,y=0;
for(;i<version1.size()&&version1[i]!='.';i++){
x=x*10+version1[i]-'0';
}
i++;
for(;j<version2.size()&&version2[j]!='.';j++){
y=y*10+version2[j]-'0';
}
j++;
if(x!=y){
return x>y?1:-1;
}
}
return 0;
}
};