您的位置:首页 > 其它

165.LeetCode Compare Version Numbers(easy)[字符串处理 分割与int转换]

2016-04-19 11:05 423 查看
Compare two version numbers version1 and version2.

If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the 
.
 character.

The 
.
 character does not represent a decimal point and is used to separate number sequences.

For instance, 
2.5
 is not "two and a half" or "half way to version three", it is the fifth
second-level revision of the second first-level revision.

Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37

解题思路:首先对每个string按照‘.’分割出来存放在两个vector里面,然后需要把不同长度的部分补0,然后对vector遍历,顺序比较,当能比较出大小时给出判断。

class Solution {
public:
void  splitVersion(string version1,vector<int> &num1)
{
int index = 0;
int start = 0;
while(version1[index] != '\0')
{
if(version1[index] == '.')
{
string temp = version1.substr(start,index-start);
stringstream ss;
ss<<temp;
int d;
ss>>d;
num1.push_back(d);
start = index+1;
}
index++;
}
string temp = version1.substr(start,index-start);
stringstream ss;
ss<<temp;
int d;
ss>>d;
num1.push_back(d);
}
int compareVersion(string version1, string version2) {
vector<int> num1;
vector<int> num2;
splitVersion(version1,num1);
splitVersion(version2,num2);
int i = 0,j = 0;
int len1 = num1.size(),len2 = num2.size();
if(len1>len2)
{
for(int i=1;i<=len1-len2;i++)
num2.push_back(0);
}
if(len1<len2)
{
for(int i=1;i<=len2-len1;i++)
num1.push_back(0);
}
while(i<num1.size()&&j<num2.size())
{
if(num1[i]>num2[j])
return 1;
else if(num1[i]<num2[j])
return -1;
else
{
i++;
j++;
}
}
return 0;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: