165. Compare Version Numbers

来源:互联网 发布:淘宝怎么打造一个爆款 编辑:程序博客网 时间:2024/06/05 04:07

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

思路:先把子version号取出来,对齐,然后从前往后比较。

class Solution {public:   int compareVersion(string version1, string version2) {           if (version1.empty() || version2.empty()) return 0;           vector<int> v1;           v1 = splitSubversions(version1);           vector<int> v2;           v2 = splitSubversions(version2);           if (v1.size() > v2.size())           {               int diff = v1.size() - v2.size(); //注意这里size会变,要提前取出来               for (int i = 0; i < diff; i++)               {                   v2.push_back(0);               }           }           else if (v1.size() < v2.size())           {               int diff = v2.size() - v1.size();               for (int i = 0; i < diff; i++)               {                   v1.push_back(0);               }           }           for (int i = 0; i < v1.size(); i++)           {               if (v1[i] < v2[i])               {                   return -1;               }               else if(v1[i] > v2[i])               {                   return 1;               }           }           return 0;    }    vector<int> splitSubversions(string version)    {        vector<int> versions;        stringstream ss(version);        int i = 0;        while (ss >> i)        {            versions.push_back(i);            if (ss.peek() == '.')            {                ss.ignore();            }        }        return versions;    }};
0 0