165. Compare Version Numbers

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Compare two version numbers version1 and version2. If **version1** > **version2** return 1; if **version1** < **version2** return -1;otherwise return 0.

    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.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

    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
    

    Solution 1

    /**
     * @param {string} version1
     * @param {string} version2
     * @return {number}
     */
    var compareVersion = function(version1, version2) {
      var v1 = version1.split('.');
      var v2 = version2.split('.');
      var len = Math.max(v1.length, v2.length);
      var t1 = 0;
      var t2 = 0;
      for (var i = 0; i < len; i++) {
        t1 = parseInt(v1[i] || 0);
        t2 = parseInt(v2[i] || 0);
        if (t1 > t2) return 1;
        if (t1 < t2) return -1;
      }
      return 0;
    };
    

    Solution 2

    class Solution {
        public int compareVersion(String version1, String version2) {
            // acquire first number
            int numA = 0;
            int i;
            for (i = 0; i < version1.length(); i++) {
                char c = version1.charAt(i);
                if (c == '.') {
                    break;
                } else {
                    numA = numA * 10 + (c - 48);
                }
            }
            // acquire second number
            int numB = 0;
            int j;
            for (j = 0; j < version2.length(); j++) {
                char c = version2.charAt(j);
                if (c == '.') {
                    break;
                } else {
                    numB = numB * 10 + (c - 48);
                }
            }
            // compare
            if (numA > numB) {
                return 1;
            } else if (numA < numB) {
                return -1;
            } else {
                // equal
                String v1 = "";
                String v2 = "";
                if (i != version1.length()) {
                    v1 = version1.substring(i + 1);
                }
                if (j != version2.length()) {
                    v2 = version2.substring(j + 1);
                }
                // if both versions end here, they are equal
                if (v1.equals("") && v2.equals("")) {
                    return 0;
                } else {
                    return compareVersion(v1, v2);
                }
            }
        }
    }
    

    Explain:

    nope.

    Complexity: