165. Compare Version Numbers

LeetCode medium оригинал: C# #array #csharp #leetcode #math #medium #string

Даны две строки версий, version1 и version2. Сравните их. Строка версии состоит из ревизий, разделенных точками '.'. Значение ревизии — это её целочисленное преобразование с игнорированием ведущих нулей.

Для сравнения строк версий сравнивайте их значения ревизий в порядке слева направо. Если одна из строк версий имеет меньше ревизий, то отсутствующие значения ревизий следует считать равными 0.

Верните следующее:

- Если version1 < version2, верните -1.

- Если version1 > version2, верните 1.

- В противном случае верните 0.

Пример:

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# решение

сопоставлено/оригинал
public 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++ решение

auto-draft, проверить перед отправкой
#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 решение

сопоставлено/оригинал
class 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 решение

сопоставлено/оригинал
var 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 решение

сопоставлено/оригинал
class 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 решение

сопоставлено/оригинал
func 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️⃣

Разделение строк: Разделите обе строки по символу точки на два массива.

2️⃣

Итерация и сравнение: Итерируйте по самому длинному массиву и сравнивайте элементы по одному. Если один из массивов закончился, предполагайте, что все оставшиеся элементы в другом массиве равны нулю, чтобы продолжить сравнение с более длинной строкой.

3️⃣

Определение результатов сравнения:

Если два сегмента не равны, верните 1 или -1 в зависимости от того, какой сегмент больше.

Если все сегменты равны после завершения цикла, версии считаются равными. Верните 0

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.