LeetCode(68)-Compare Version Numbers


タイトル:
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

考え方:
  • 題:2つのバージョン番号文字列のサイズを比較する
  • 文字列をsplitで配列に変換し、split(.)に注意し、次に整数配列に変換し、比較を遍歴します.注意バージョン番号の後ろがゼロの場合
  • コード:
    public class Solution {
          public int compareVersion(String version1, String version2) {
            String[] v1,v2;
            if(version1.indexOf(".") == -1){
                v1 = new String[1];
                v1[0] = version1;
            }else{
                 v1 = new String[version1.split("\\.").length];
                 v1 = version1.split("\\.");
            }
            if(version2.indexOf(".") == -1){
                v2 = new String[1];
                v2[0] = version2;
            }else{
                v2 = new String[version2.split("\\.").length];
                v2 = version2.split("\\.");
            }
            int[] array1 = sToInt(v1);
            int[] array2 = sToInt(v2);
            int nn = Math.min(array1.length,array2.length);
            for(int a = 0;a < nn;a++){
                if(array1[a] > array2[a]){
                    return 1;
                }else if(array1[a] < array2[a]){
                    return -1;
                }
            }
            if(array1.length > array2.length){
                for(int k = nn; k < array1.length;k++){
                    if(array1[k] != 0){
                        return 1;
                    }
                }
                return 0;
            }else if(array1.length < array2.length){
                for(int m = nn;m < array2.length;m++){
                    if(array2[m] != 0){
                        return -1;
                    }
                }
                return 0;
            }
            return 0;
        }
        public int[] sToInt(String[] ss){
            int n = ss.length;
            int[] result = new int[n];
            for(int i = 0;i < n;i++){
                try{
                    result[i] = Integer.parseInt(ss[i]);
                }catch(Exception e){
    
                }
            }
            return result;
        }
    }