Compare Version Numbers-兩個數字類型版本大小

  1. 題目描述
  2. 知識點及思路
  3. 總結

    一.題目描述
    簡述:0.1 < 1.1 < 1.2 < 13.37<13.37.1 小數點之後爲當前版本的子版本
    二.知識點及思路
    知識點:字符切分;類型轉換;問題全面性考慮
    思路:①按照點(.)進行字符切分,存入容器②將字符類型轉換成整形③當靠左的數字不同,較大的版本高;相同則依次向右側比較
    代碼如下:

class Solution {
private:
void split(const string& src, const string& separator, vector<string>& dest)
{
    string str = src;
    string substring;
    string::size_type start = 0, index;

    do
    {
        index = str.find_first_of(separator,start);
        if (index != string::npos)
        {    
            substring = str.substr(start,index-start);
            dest.push_back(substring);
            start = str.find_first_not_of(separator,index);
            if (start == string::npos) return;
        }
    }while(index != string::npos);

    //the last token
    substring = str.substr(start);
    dest.push_back(substring);
}
vector<int> itoa(vector<string>&versionSource)
{
    vector<int>version;
    for(int i=0;i<versionSource.size();i++)
        version.push_back(atoi(versionSource[i].c_str()));
    return version;
}
public:
    int compareVersion(string version1, string version2) 
    {
        vector<string>dest1,dest2;
        split(version1, ".", dest1);
        split(version2, ".", dest2);
        vector<int>versionOne=itoa(dest1);
        vector<int>versionTwo=itoa(dest2);
        int sizeDiff = ((versionOne.size() - versionTwo.size()));
        if (sizeDiff<0)
            sizeDiff = -sizeDiff;
        if(versionOne.size()>versionTwo.size())
            for(int i=0;i<sizeDiff;i++)
                versionTwo.push_back(0);
        else
            for(int i=0;i<sizeDiff;i++)
                versionOne.push_back(0);
        for(int i=0;i<versionOne.size();i++)
        {
            if(versionOne[i]>versionTwo[i])
             return 1;
            else if(versionOne[i]<versionTwo[i])
             return -1;
        }
        return 0;

    }
};

三.總結
I.①字符的切分由於c/c++語言沒有提供,要掌握思路②類型轉換當中atoi(const char*)類型,多注意小細節II.讓我們一同努力,明天會更好!

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章