题解 | #比较版本号#

比较版本号

http://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 
     * @param version2 string字符串 
     * @return int整型
     */
    public int compare (String version1, String version2) {
        // write code here
        if(version1 == null || version2 == null){
            return -1;
        }
        String[] data1 = version1.split("\\.");
        String[] data2 = version2.split("\\.");
        
        int len = Math.max(data1.length, data2.length);
        for(int i = 0;i < len;i++){
            String a = i < data1.length ? data1[i] : "0";
            String b = i < data2.length ? data2[i] :"0";
            
            for(int j = 0;j< a.length(); j++){
                //遇到开头数字为0的,去掉前缀0,如果全为0的直接截取最后一位即可。
                if(j == a.length() - 1 || a.charAt(j) != '0'){
                    a = a.substring(j);
                    break;
                }
            }
              for (int j = 0; j < b.length(); j++) {
                if (j == b.length() - 1 || b.charAt(j) != '0') {
                    b = b.substring(j);
                    break;
                }
            }
            if(a.length() > b.length()){
                return 1;
            }else if(a.length() < b.length()){
                return -1;
            }else{
                if(a.compareTo(b) > 0){
                    return 1;
                }else if( a.compareTo(b) < 0){
                    return -1;
                }
            }
        }
        return 0;
        
        //下面方***数组越界 需要考虑到使用BigInteger,实际情况可能会用时间戳作为标本
//         int index = 0;
//         while(index < data1.length && index < data2.length){
//             int a = Integer.parseInt(data1[index]);
//             int b = Integer.parseInt(data2[index]);
//             if(a > b){
//                 return 1;
//             }else if(a < b){
//                 return -1;
//             }
//             index ++;
//         }
//         if(index >= data1.length){
//             for(int i = index;i < data2.length;i++){
//                 int c = Integer.parseInt(data2[i]);
//                 if(c != 0){
//                     return -1;
//                 }
//             }
//             return 0;
//         }
//         if(index >= data2.length){
//              for(int i = index;i < data1.length;i++){
//                 int c = Integer.parseInt(data1[i]);
//                 if(c != 0){
//                     return 1;
//                 }
//             }
//             return 0;
//         }
//         return 0 ;
    }
}
全部评论

相关推荐

11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务