Thursday, August 13, 2015

Compare Version Numbers | Leetcode

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.

Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
Credits:
Special thanks to @ts for adding this problem and creating all test cases.

---

Solution: Split the version strings into arrays of numbers. Iterate through the arrays until the maximum of the two array lengths. In each iteration i, compare the current number at index i. If they are different, return the answer immediately (1 or -1). If we exit the loop without an answer, that means both versions are equal, so return 0.
public class Solution {
    public int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        int maxLen = Math.max(v1.length, v2.length);

        for (int i = 0; i < maxLen; i++) {
            int n1 = (i < v1.length) ? Integer.parseInt(v1[i]) : 0;
            int n2 = (i < v2.length) ? Integer.parseInt(v2[i]) : 0;
            
            if (n1 > n2) return 1;
            if (n1 < n2) return -1;
        }
        
        return 0;
    }
}

No comments: