zoukankan      html  css  js  c++  java
  • 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;      
        }
    }
  • 相关阅读:
    HDU 4460 Friend Chains 第37届ACM/ICPC杭州赛区题目 (bfs求最短路,求两两之间最短路的最大值)
    HDU 4445 Crazy Tank (简单物理题,枚举)
    HDU 4433 locker 第37届ACM/ICPC 天津赛区现场赛C题(DP)
    JQuery 3级级联,3级联动,3级连动
    C++异常处理
    C++ Template
    学会用core dump调试程序错误(转)
    C++命名规则
    vim实用配置(转)
    GDB多进程调试(转)
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4338212.html
Copyright © 2011-2022 走看看