• Compare Version Numbers


    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.

    思路:

      简单的数学推导而已,就是需要考虑的case比较多

    我的代码:

    public class Solution {
        public int compareVersion(String version1, String version2) {
            if(version1 == null && version2 == null)    return 0;
            if(version1 == null)    return -1;
            if(version2 == null)    return 1;
            String[] ones = version1.split("\.");
            String[] twos = version2.split("\.");
            int i = 0;
            for(; i < ones.length && i < twos.length; i++)
            {
                int one = Integer.valueOf(ones[i]);
                int two = Integer.valueOf(twos[i]);
                if(one == two) continue;
                if(one > two) return 1;
                if(one < two) return -1;
            }
            while(i < ones.length)
            {
                int one = Integer.valueOf(ones[i]);
                if(one != 0) return 1;
                i++;
            }
            while(i < twos.length)
            {
                int two = Integer.valueOf(twos[i]);
                if(two != 0) return -1;
                i++;
            }
            return 0;
        }
    }
    View Code

    他人代码:

    public class Solution {
        public int compareVersion(String version1, String version2) {
            String[] v1 = version1.split("\.");
            String[] v2 = version2.split("\.");
    
            int longest = v1.length > v2.length? v1.length: v2.length;
    
            for(int i=0; i<longest; i++)
            {
                int ver1 = i<v1.length? Integer.parseInt(v1[i]): 0;
                int ver2 = i<v2.length? Integer.parseInt(v2[i]): 0;
    
                if(ver1> ver2) return 1;
                if(ver1 < ver2) return -1;
            }
            return 0;
        }
    }
    View Code

    学习之处:

    • 思路和方法都不难,就是需要考虑到的情况有点多,需要考虑仔细啦
    • 他人的代码真简洁,简洁来源于int ver1 = i<v1.length? Integer.parseInt(v1[i]): 0;好好学习一下下。
    • 让我联想到了Comparator 接口,接口的使用方法,如下代码所示,另外假如A的值大于B,你返回1。这样调用Collections.sort()方法就是升序;假如A的值大于B,你返回-1。这样调用Collections.sort()方法就是降序。
    public class StringComparator implements Comparator<String>{
        @Override
        public int compare(String A, String B) {
               return 0;      
        }
    }
  • 相关阅读:
    【MySql学习笔记】MySql索引
    【MySql学习笔记】MySql事务
    【计算机网络学习笔记】TCP三次握手与四次挥手
    【设计模式学习笔记】单例模式
    【设计模式学习笔记】设计模式概述
    【设计模式学习笔记】七大原则『二』
    改变input tpye 属性radio css 样式!!!
    js常用汇总
    js判断是否移动端及浏览器内核
    100多个基础常用JS函数和语法集合大全
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4338212.html
Copyright © 2020-2023  润新知