题目:
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。
示例:
输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
解题方法:
这道题其实比想象中的要简单,主要原因是版本号的前导0是不影响版本号大小比较。
处理流程就是:
- 将版本号分割,并转成数字;
- 按照顺序比较相同位置的两个数组;
代码和结果:
class Solution {
public:
void split(string s,vector<int> &n)
{
string t="";
for(int i=0;i<s.size();i++)
{
if(s[i]!='.')
{
t.push_back(s[i]);
}
else
{
n.push_back(atoi(t.c_str()));
t="";
}
}
if(!t.empty()) n.push_back(atoi(t.c_str()));
}
int compareVersion(string version1, string version2) {
vector<int> n1,n2;
split(version1,n1);
split(version2,n2);
int sz1=n1.size();
int sz2=n2.size();
int mxz=sz1<sz2?sz2:sz1;
int k1,k2;
for(int i=0;i<mxz;i++)
{
if(i>=sz1) k1=0;
else k1=n1[i];
if(i>=sz2) k2=0;
else k2=n2[i];
if(k1>k2) return 1;
else if(k1<k2) return -1;
else continue;
}
return 0;
}
};
运行结果:原题链接:https://leetcode-cn.com/problems/compare-version-numbers/