题目叙述
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。
分析
在本题主要是考察分割字符串和字符串转整数。
- 将字符串按照‘.’进行分割
- 然后将每一个元素转化为整数
- 迭代对应位置对比
代码
class Solution {
public:
void mysplit(vector<int>& res, string s, char c){
string word;
istringstream iss(s);
while(getline(iss, word, c)){
res.push_back(atoi((word).c_str()));
}
}
int compareVersion(string version1, string version2) {
//本题的关键就是删除所有的0, 然后进行比较
vector<int> res1;
vector<int> res2;
mysplit(res1, version1, '.');
mysplit(res2, version2, '.');
int len = min(res1.size(), res2.size());
for(int i=0;i<len;i++){
if(res1[i]==res2[i]) continue;
if(res1[i]>res2[i]) return 1;
else return -1;
}
if(res1.size()>len){
for(int i=len;i<res1.size();i++){
if(res1[i]!=0) return 1;
}
}
if(res2.size()>len){
for(int i=len;i<res2.size();i++){
if(res2[i]!=0) return -1;
}
}
return 0;
}
};