1. 程式人生 > >【LeetCode】165. 比較版本號 結題報告 (C++)

【LeetCode】165. 比較版本號 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/compare-version-numbers/description/

題目描述:

比較兩個版本號 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

你可以假設版本字串非空,並且只包含數字和 . 字元。

 . 字元不代表小數點,而是用於分隔數字序列。

例如,2.5 不是“兩個半”,也不是“差一半到三”,而是第二版中的第五個小版本。

示例 1:

輸入: version1 = "0.1", version2 = "1.1"
輸出: -1
示例 2:

輸入: version1 = "1.0.1", version2 = "1"
輸出: 1
示例 3:

輸入: version1 = "7.5.2.4", version2 = "7.5.3"
輸出: -1

 

解題方案:

開始的思路是,一個一個進行字元的比較。後來發現,這種方式需要考的情況太多了,領釦給出的樣例有很奇怪的資料,比較的麻煩。在一個問題上困擾太多,要及時進行調整,不要過於固執,需轉變思維,化繁為簡。。。

之後,選擇將字串轉化為整數再進行比較。

程式碼:

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int val1, val2;
        int idx1 = 0, idx2 = 0;
        while (idx1 < version1.length() || idx2 < version2.length()) {
            val1 = 0;
            while (idx1 < version1.length()) {
                if (version1[idx1] == '.') {
                    ++idx1;
                    break;
                }
                val1 = val1 * 10 + (version1[idx1] - '0');
                idx1 ++;
            }
            
            val2 = 0;
            while (idx2 < version2.length()) {
                if (version2[idx2] == '.') {
                    idx2 ++;
                    break;
                }
                val2 = val2 * 10 + (version2[idx2] - '0');
                idx2 ++;
            }
            if (val1 > val2) return 1;
            if (val1 < val2) return -1;
        }
        return 0;
    }
};