【LeetCode】165. 比較版本號 結題報告 (C++)
阿新 • • 發佈:2018-11-11
原題地址: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; } };