美文网首页
165. 比较版本号

165. 比较版本号

作者: 漫行者_ | 来源:发表于2021-09-01 22:53 被阅读0次

    165. 比较版本号

    注意事项:

    • 注意用split的时候里面分的是正则表达。因此点为"\."
    • 字符串的compareTo不一定是0,-1,1.
      自己做的是逐级比较,并且去掉首部分的零。代码如下:
       public static int compareVersion(String version1, String version2) {
            String[] split1 = version1.split("\\.");
            String[] split2 = version2.split("\\.");
            int min = Math.min(split1.length, split2.length);
            for(int i=0; i<min; i++) {
                int compare =  compare(split1[i], split2[i]);
                if(compare != 0) {
                    return compare;
                }
            }
            String[] temp;
            int result = 0;
            if(min == split1.length) {
                temp = split2;
                result = -1;
            } else {
                temp = split1;
                result = 1;
            }
            for (int i = min; i < temp.length; i++) {
                if(!trim(temp[i]).equals("0")) {
                    return result;
                }
            }
            return 0;
        }
    
        public static int compare(String s1, String s2) {
            s1 = trim(s1);
            s2 = trim(s2);
            return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
        }
    
        public static String trim(String s) {
            for (int j = 0; j < s.length(); j++) {
                if(s.charAt(j) != '0') {
                    return s.substring(j);
                }
            }
            return "0";
        }
    
        public static void main(String[] args) {
            System.out.println(compareVersion("1.05", "1.1"));
        }
    
    image.png

    别人解法容易很多,parseInt可以去掉上面的0;

        public int compareVersion(String v1, String v2) {
            String[] ss1 = v1.split("\\."), ss2 = v2.split("\\.");
            int n = ss1.length, m = ss2.length;
            int i = 0, j = 0;
            while (i < n || j < m) {
                int a = 0, b = 0;
                if (i < n) a = Integer.parseInt(ss1[i++]);
                if (j < m) b = Integer.parseInt(ss2[j++]);
                if (a != b) return a > b ? 1 : -1;
            }
            return 0;
        }
    

    相关文章

      网友评论

          本文标题:165. 比较版本号

          本文链接:https://www.haomeiwen.com/subject/xxnfwltx.html