LeetCode 165 比較版本號

2021-10-05 23:12:41 字數 1641 閱讀 6082

比較兩個版本號 version1 和 version2。

如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

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

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

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

你可以假設版本號的每一級的預設修訂版號為 0。例如,版本號 3.4 的第一級(大版本)和第二級(小版本)修訂號分別為 3 和 4。其第**和第四級修訂號均為 0。

示例 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

示例 4:

輸入:version1 = 「1.01」, version2 = 「1.001」

輸出:0

解釋:忽略前導零,「01」 和 「001」 表示相同的數字 「1」。

示例 5:

輸入:version1 = 「1.0」, version2 = 「1.0.0」

輸出:0

解釋:version1 沒有第**修訂號,這意味著它的第**修訂號預設為 「0」。

版本字串由以點 (.) 分隔的數字字串組成。這個數字字串可能有前導零。

版本字串不以點開始或結束,並且其中不會有兩個連續的點。

該題從開頭挨個比較,前者大於後者 返回1 ,小於後者返回-1,相同返回0 表示兩個版本號相同。

其中注意01、 0000000001 沒有什麼區別,在題目中是相同,聯想到atoi這個介面,對字串轉換為整數時,兩者也是一樣,那就選擇使用該介面。

還有乙個需要注意 示例5中,1.0 和 1.0.0是相同的。

具體的思路:

按照上面對題意的分析,那就從頭開始比較,基於示例5 不能只判斷 兩者的內容以及長度了,急著後面進行補零操作

version1 = 0.1version2 = "1.1",取各自的第乙個數字,保留後續的子串做下次比較。

#include

#include

using namespace std;

intcompareversion

(string version1, string version2)

else

if(idx2 ==-1

)else

}else

// cout << "num1 : " << num1 << endl;

// cout << "num2 : " << num2 << endl;

if(num1 > num2)

else

if(num1 < num2)

}return0;

}int

main()

leetcode165 比較版本號

比較兩個版本號 version1 和 version2。如果 version1 version2 返回 1,如果 version1 version2 返回 1,除此之外返回 0。你可以假設版本字串非空,並且只包含數字和 字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5 不是 兩個半 也不是...

leetcode165比較版本號

class solution object defcompareversion self,version1,version2 type version1 str type version2 str rtype int 不一定只有4級,以長的那級為準 sp1 version1.split sp2 ve...

leetcode 165 比較版本號

165.比較版本號 比較兩個版本號 version1 和 version2。如果 version1 version2 返回 1,如果 version1 version2 返回 1,除此之外返回 0。你可以假設版本字串非空,並且只包含數字和 字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5 ...