BiruLyu
6/21/2017 - 6:07 AM

165. Compare Version Numbers.java

"""
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

"""
class Solution(object):
    def compareVersion(self, version1, version2):
        """
        :type version1: str
        :type version2: str
        :rtype: int
        """
        
        versionList1 = version1.split('.');# split each version string by '.'
        versionList2 = version2.split('.');
        
        
        length1 = len(versionList1);
        length2 = len(versionList2);
        flag = 0;
        
        for i in range(min(length1,length2)): # Compare the minimum length 
            flag = i;
            if int(versionList1[i]) > int(versionList2[i]):
                return 1;
            elif int(versionList1[i]) < int(versionList2[i]):
                return -1;
        
    
        
        if flag == length1 - 1  and flag == length2 -1: # Scan the left part of version1 or version2
            return 0;
        elif flag == len(versionList1) - 1:
            while(flag < length2 - 1):
                flag += 1;
                if int(versionList2[flag]) != 0:
                    return -1;
            return 0;
        elif flag == len(versionList2) -1 :
            while(flag < length1 - 1):
                flag += 1;
                if int(versionList1[flag]) != 0:
                    return 1;
            return 0;
                
            
            
                
        
        
public class Solution {
    public int compareVersion(String version1, String version2) {
        if (version1 == null || version2 == null) return -1;
        int len1 = version1.length();
        int len2 = version2.length();
        int i = 0;
        int j = 0;
        while (i < len1 || j < len2) {
            int num1 = 0;
            int num2 = 0;
            while (i < len1 && version1.charAt(i) >= '0' && version1.charAt(i) <= '9') {
                num1 = num1 * 10 + version1.charAt(i++) - '0';
            }
            while (j < len2 && version2.charAt(j) >= '0' && version2.charAt(j) <= '9') {
                num2 = num2 * 10 + version2.charAt(j++) - '0';
            }
            if (num1 < num2) return -1;
            else if (num1 > num2) return 1;
            i++;
            j++;
        }
        return 0;
    }
}