165. Compare Version Numbers

来源:互联网 发布:hyde知乎 编辑:程序博客网 时间:2024/06/16 13:50

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
Credits:
Special thanks to @ts for adding this problem and creating all test cases.

分析:

  1. 切割字符串,分别保存到数组str1,str2中
  2. 比较两个数组的长度,将数组长度中较小的赋值给small
  3. 在数组中循环比较每个数据的大小,不相等就返回结果;长度相等且数值大小也都一样,就返回0;
  4. 如果数组长度不同,在较长的数组中从small处开始遍历,如果数组中每一个数值都是0,结果将返回0。否则返回结果,如果较长数组是str1,则返回1,否则返回-1;

测试用例:

    @Test    public void compareVersionTest(){        println(s.compareVersion("", ""));        println(s.compareVersion("1.0", "1"));        println(s.compareVersion("1.0.0.1", "1"));        println(s.compareVersion("1.25.3", "1.156.4"));        println(s.compareVersion("123.2", "13.37"));        println(s.compareVersion("13.37", "13.37"));    }

特殊用例:

  • 两个字符串都为空
  • 一个为1.0 ,另一个为1

代码:

    public int compareVersion(String version1, String version2) {        if(version1==null || version2 == null) return 0;        if(version1.equals("")&& version2.equals("")) return 0;        if(version1.equals("")) return -1;        if(version2.equals("")) return 1;//      直接使用'.'进行切割没有切出来,故做此替换//      String[] str1 = version1.split(".");//      String[] str2 = version2.split(".");        version1 = version1.replace('.', ':');        version2 = version2.replace('.', ':');        String[] str1 = version1.split(":");        String[] str2 = version2.split(":");        int small = str1.length>str2.length?str2.length:str1.length;        for(int i = 0;i<small;i++){            int num1 = Integer.parseInt(str1[i]);            int num2 = Integer.parseInt(str2[i]);            if( num1 > num2){                return 1;            }            if(num1<num2){                return -1;            }        }        //对应println(s.compareVersion("13.37", "13.37"));        if(small == str1.length && small == str2.length){            return 0;        }//      对应println(s.compareVersion("1.0", "1"));        while(small<str1.length){            if(Integer.parseInt(str1[small])==0){                small++;                continue;            }else{                return 1;            }        }        while(small<str2.length){            if(Integer.parseInt(str2[small])==0){                small++;                continue;            }else{                return -1;            }        }        return 0;    }
0 0
原创粉丝点击