题解 | #比较版本号# 自己的解法 应该是O(N)
比较版本号
https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
class Solution {
public:
// 我自己的解法
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
int compare(string version1, string version2) {
// write code here
// 双指针
int m = version1.size();
int n = version2.size();
int num1=0, num2=0;
int pt1 = 0, pt2 = 0;
char c1, c2;
while(pt1<m || pt2<n) // 这里只要二者之一没遍历完 就继续 因为会有两者长度不一致 1.0.1, 1
{
while(version1[pt1]!='.' && pt1<m)// 累加数字 直到遇到.
{
c1 = version1[pt1];
int d1 = c1-'0';
num1 = 10*num1 + d1;
pt1++;
}
while(version2[pt2]!='.' && pt2<n) //如果其中一个较短 那之后num就是0 也是有效的
{
c2 = version2[pt2];
int d2 = c2-'0';
num2 = 10*num2 + d2;
pt2++;
}
if(num1>num2) // 相等的情况就不管 继续
{
return 1;
}
else if(num1<num2)
{
return -1;
}
// 比完1个修订号之后 就清零
num1 = 0;
num2 = 0;
pt1++;
pt2++;
}
// if(pt1<m)
// return 1;
// if(pt2<n)
// return -1;
return 0 ;
}
};

查看4道真题和解析