165. Compare Version Numbers
給定兩個版本字符串,version1 和 version2,對它們進行比較。版本字符串由點 '.' 分隔的修訂號組成。修訂號的值是其整數轉換,忽略前導零。
要比較版本字符串,請按從左到右的順序比較它們的修訂號值。如果其中一個版本字符串的修訂號較少,則將缺失的修訂號值視為 0。
返回以下結果:
如果 version1 < version2,返回 -1。
如果 version1 > version2,返回 1。
否則,返回 0。
範例1: 輸入: version1 = "1.2", version2 = "1.10" 輸出: -1 解釋: version1 的第二個修訂號是 "2",version2 的第二個修訂號是 "10":2 < 10,所以 version1 < version2。
Python
class Solution:
def compareVersion(self, version1: str, version2: str) -> int:
v1 = list(map(int, version1.split('.')))
v2 = list(map(int, version2.split('.')))
# Pad the shorter version with zeros
max_length = max(len(v1), len(v2))
v1 += [0] * (max_length - len(v1))
v2 += [0] * (max_length - len(v2))
for i in range(max_length):
if v1[i] < v2[i]:
return -1
elif v1[i] > v2[i]:
return 1
return 0
16.65MB, 18ms
C++
class Solution {
public:
int compareVersion(string version1, string version2) {
vector<int> v1 = splitVersion(version1);
vector<int> v2 = splitVersion(version2);
int n1 = v1.size(), n2 = v2.size();
int maxLength = max(n1, n2);
for (int i = 0; i < maxLength; i++) {
int rev1 = i < n1 ? v1[i] : 0;
int rev2 = i < n2 ? v2[i] : 0;
if (rev1 < rev2) return -1;
if (rev1 > rev2) return 1;
}
return 0;
}
private:
vector<int> splitVersion(const string& version) {
vector<int> result;
stringstream ss(version);
string revision;
while (getline(ss, revision, '.')) {
result.push_back(stoi(revision));
}
return result;
}
};
7.90MB, 3ms
Javascript
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function(version1, version2) {
const v1 = version1.split('.').map(Number);
const v2 = version2.split('.').map(Number);
const maxLength = Math.max(v1.length, v2.length);
for (let i = 0; i < maxLength; i++) {
const rev1 = i < v1.length ? v1[i] : 0;
const rev2 = i < v2.length ? v2[i] : 0;
if (rev1 < rev2) return -1;
if (rev1 > rev2) return 1;
}
return 0;
};
48.88MB, 45ms