165. Compare Version Numbers
given две строки версий, version1 и version2. Сравните их. chaîne версии состоит из ревизий, разделенных точками '.'. Значение ревизии — это её целочисленное преобразование с игнорированием ведущих нулей.
Для сравнения строк версий сравнивайте их значения ревизий в порядке слева направо. Если одна из строк версий имеет меньше ревизий, то отсутствующие значения ревизий следует считать равными 0.
return следующее:
- Если version1 < version2, return -1.
- Если version1 > version2, return 1.
- В противном случае return 0.
Exemple:
Input: version1 = "1.2", version2 = "1.10"
Output: -1
Explanation:
version1's second revision is "2" and version2's second revision is "10": 2 < 10, so version1 < version2.
C# solution
correspondant/originalpublic class Solution {
public int CompareVersion(string version1, string version2) {
string[] nums1 = version1.Split(new char[] { '.' });
string[] nums2 = version2.Split(new char[] { '.' });
int n1 = nums1.Length, n2 = nums2.Length;
int i1, i2;
for (int i = 0; i < Math.Max(n1, n2); ++i) {
i1 = i < n1 ? Int32.Parse(nums1[i]) : 0;
i2 = i < n2 ? Int32.Parse(nums2[i]) : 0;
if (i1 != i2)
return i1 > i2 ? 1 : -1;
}
return 0;
}
}
C++ solution
brouillon automatique, à relire avant soumission#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int CompareVersion(string version1, string version2) {
vector<string> nums1 = version1.Split(new char[] { '.' });
vector<string> nums2 = version2.Split(new char[] { '.' });
int n1 = nums1.size(), n2 = nums2.size();
int i1, i2;
for (int i = 0; i < max(n1, n2); ++i) {
i1 = i < n1 ? Int32.Parse(nums1[i]) : 0;
i2 = i < n2 ? Int32.Parse(nums2[i]) : 0;
if (i1 != i2)
return i1 > i2 ? 1 : -1;
}
return 0;
}
}
Java solution
correspondant/originalclass Solution {
public int compareVersion(String version1, String version2) {
String[] nums1 = version1.split("\\.");
String[] nums2 = version2.split("\\.");
int n1 = nums1.length, n2 = nums2.length;
int i1, i2;
for (int i = 0; i < Math.max(n1, n2); ++i) {
i1 = i < n1 ? Integer.parseInt(nums1[i]) : 0;
i2 = i < n2 ? Integer.parseInt(nums2[i]) : 0;
if (i1 != i2) {
return i1 > i2 ? 1 : -1;
}
}
return 0;
}
}
JavaScript solution
correspondant/originalvar compareVersion = function (version1, version2) {
let nums1 = version1.split(".");
let nums2 = version2.split(".");
let n1 = nums1.length,
n2 = nums2.length;
for (let i = 0; i < Math.max(n1, n2); ++i) {
let i1 = i < n1 ? parseInt(nums1[i]) : 0;
let i2 = i < n2 ? parseInt(nums2[i]) : 0;
if (i1 != i2) {
return i1 > i2 ? 1 : -1;
}
}
return 0;
};
Python solution
correspondant/originalclass Solution:
def compareVersion(self, version1: str, version2: str) -> int:
nums1 = version1.split(".")
nums2 = version2.split(".")
n1, n2 = len(nums1), len(nums2)
for i in range(max(n1, n2)):
i1 = int(nums1[i]) if i < n1 else 0
i2 = int(nums2[i]) if i < n2 else 0
if i1 != i2:
return 1 if i1 > i2 else -1
return 0
Go solution
correspondant/originalfunc compareVersion(version1 string, version2 string) int {
tokens1 := strings.Split(version1, ".")
tokens2 := strings.Split(version2, ".")
for i := 0; i < max(len(tokens1), len(tokens2)); i++ {
i1, i2 := 0, 0
if i < len(tokens1) {
i1, _ = strconv.Atoi(tokens1[i])
}
if i < len(tokens2) {
i2, _ = strconv.Atoi(tokens2[i])
}
if i1 > i2 {
return 1
} else if i1 < i2 {
return -1
}
}
return 0
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
Algorithm
1️⃣
Разделение строк: Разделите обе строки по символу точки на два tableauа.
2️⃣
Итерация и сравнение: Итерируйте по самому длинному tableauу и сравнивайте elementы по одному. Если один из tableauов закончился, предполагайте, что все оставшиеся elementы в другом tableauе равны нулю, чтобы продолжить сравнение с более длинной строкой.
3️⃣
Définition результатов сравнения:
Если два сегмента не равны, return 1 или -1 в зависимости от того, какой сегмент больше.
Если все сегменты равны после завершения цикла, версии считаются равными. return 0
😎
Vacancies for this task
offres actives with overlapping task tags are affichés.