1. 程式人生 > 實用技巧 >165. Compare Version Numbers - Medium

165. Compare Version Numbers - Medium

Compare two version numbersversion1andversion2.
Ifversion1>version2return1;ifversion1<version2return-1;otherwise return0.

You may assume that the version strings are non-empty and contain only digits and the.character.

The.character does not represent a decimal point and is used to separate number sequences.

For instance,2.5is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

You may assume the default revision number for each level of a version number to be0. For example, version number3.4has a revision number of3and4for its first and second level revision number. Its third and fourth level revision number are both0

.

Example 1:

Input: version1 = "0.1", version2 = "1.1"
Output: -1

Example 2:

Input: version1 = "1.0.1", version2 = "1"
Output: 1

Example 3:

Input: version1 = "7.5.2.4", version2 = "7.5.3"
Output: -1

Example 4:

Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”

Example 5:

Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"

Note:

  1. Version strings are composed of numeric strings separated by dots.and this numeric stringsmayhave leading zeroes.
  2. Version strings do not start or end with dots, and they will not be two consecutive dots.

time = O(n), space = O(n)

class Solution {
    public int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        
        int n = Math.max(v1.length, v2.length);
        for(int i = 0; i < n; i++) {
            int x = i < v1.length ? Integer.parseInt(v1[i]) : 0;
            int y = i < v2.length ? Integer.parseInt(v2[i]) : 0;
            if(x > y) {
                return 1;
            } else if(x < y) {
                return -1;
            } else {
                continue;
            }
        }
        return 0;
    }
}