LeetCode Compare Version Numbers

Description

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

The original problem is here.
The original code is here.

My Solution

I solve this problem in C++, as below:

/*
*Compare Version Numbers
*Author: shuaijiang
*Email: zhaoshuaijiang8@gmail.com
*/
#include<iostream>
#include<sstream>
#include<vector>
#include<string.h>
#include<math.h>
using namespace std;

class Solution {
public:
    int compareVersion(string version1, string version2) {
        vector<string> vec1 = str2Vector(version1);
        vector<string> vec2 = str2Vector(version2);
        int strLarger;
        int addSize = 0;
        if(vec1.size() > vec2.size())
        {
            addSize = vec1.size() - vec2.size();
            vectorRaise(vec2,addSize); 
        }
        else if(vec1.size() < vec2.size())
        {
            addSize = vec2.size() - vec1.size();
            vectorRaise(vec1,addSize); 
        }
        vector<string>::iterator iter1,iter2;
        for(iter1=vec1.begin(),iter2=vec2.begin();iter1<vec1.end()&&iter2<vec2.end();++iter1,++iter2)
        {
            strLarger = strCompare(*iter1,*iter2);
            if(strLarger == 1)
                return 1;
            else if(strLarger == -1)
                return -1;
            else if(iter1==vec1.end()-1 && iter2==vec2.end()-1)
            {
                if(strLarger == 0)
                    return 0;
            }
        } 
    }
    int strCompare(string str1, string str2)
    {
        int num1=str2Integer(str1);
        int num2=str2Integer(str2);
        if(num1>num2)
            return 1;
        else if(num1<num2)
            return -1;
        else
            return 0;
    }
    int str2Integer(string str)
    {
        stringstream ss;
        int num;
        ss.clear();
        ss.str("");
        ss<<str;
        ss>>num;
        return num;
    }
    vector<string> str2Vector(string str)
    {
        string strNum, strTemp;
        stringstream ss;
        vector<string> strVec;
        for(int count=0;count<str.size();++count)
        {
            if(count == str.size()-1)
            {
                ss.clear();
                ss<<str[count];
                ss>>strTemp;
                strNum.append(strTemp);
                strVec.push_back(strNum);
            }
            if(str[count] == '.')
            {
                strVec.push_back(strNum);
                strNum.clear();
            }
            else
            {
                ss.clear(); 
                ss<<str[count];
                ss>>strTemp;
                strNum.append(strTemp);
            }
        }
        return strVec;
    }
    void vectorRaise(vector<string> & vec,int addSize)
    {
        for(int count=0;count<addSize;count++)
            vec.push_back("0");
    }
};
//The code below is used for test
int main()
{
    string str1 = "1.0";
    string str2 = "0.1";
    Solution s;
    int res = s.compareVersion(str1,str2);
    cout<<"res="<<res<<endl;
    //system("pause");
}
TEXT

Note

Many situations should be considered, such as there are more than one “.”, the two versions have differet number of subversion and so on.


LeetCode Compare Version Numbers
http://zhaoshuaijiang.com/2015/03/30/leetcode_compare_version_numbers/
作者
shuaijiang
发布于
2015年3月30日
许可协议