zoukankan      html  css  js  c++  java
  • ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java

    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

    比较两个字符串数字的大小:(小数点可能不止一个)

    注意的地方:

    1、多个小数点的处理。

    2、考虑清楚细节就可以了,题目本身不难。

    1、直接判断,代码较多。

    public class Solution {
        public int compareVersion(String version1, String version2) {
            int len1 = version1.length();
            int len2 = version2.length();
            int start1 = 0;
            int start2 = 0;
            int[] nums = new int[2];
            while (start1 < len1 && start2 < len2){
                nums = getNum(version1, start1, len1);
                int num1 = nums[1];
                start1 = nums[0];
                nums = getNum(version2, start2, len2);
                int num2 = nums[1];
                start2 = nums[0];
                if (num1 > num2){
                    return 1;
                } else if (num1 < num2){
                    return -1;
                }
            }
            if (start1 >= len1 && start1 >= len2){
                return 0;
            } else if (start1 >= len1){
                while (start2 < len2){
                    nums = getNum(version2, start2, len2);
                    if (nums[1] != 0){
                        return -1;
                    }
                    start2 = nums[0];
                }
                return 0;
            } else {
                while (start1 < len1){
                    nums = getNum(version1, start1, len1);
                    if (nums[1] != 0){
                        return 1;
                    }
                    start1 = nums[0];
                }
                return 0;
            }
        }
        public int[] getNum(String str, int start, int len){
            int end = start;
            int[] result = new int[2];
            while (end < len && str.charAt(end) != '.'){
                end++;
            }
            result[0] = end+1;
            if( end == start){
                result[1] = 0;
            } else {
                result[1] = Integer.valueOf(str.substring(start,end));
            }
            return result;
        }
    }

    2、同样的处理方式,也有很简单的写法(参考discuss)

    public class Solution {
        public int compareVersion(String version1, String version2) {
            int temp1 = 0,temp2 = 0;
            int len1 = version1.length(),len2 = version2.length();
            int i = 0,j = 0;
            while(i<len1 || j<len2) {
                temp1 = 0;
                temp2 = 0;
                while(i<len1 && version1.charAt(i) != '.') {
                    temp1 = temp1*10 + version1.charAt(i++)-'0';
                }
                while(j<len2 && version2.charAt(j) != '.') {
                    temp2 = temp2*10 + version2.charAt(j++)-'0';
                
                }   
                if(temp1>temp2) return 1;
                else if(temp1<temp2) return -1;
                else {
                    i++;
                    j++;
                
                }
            
            }
            return 0;
        }
    }

    3、使用split()。(参考discuss)

    public int compareVersion(String version1, String version2) {
        
        String[] v1 = version1.split("\.");
        String[] v2 = version2.split("\.");
        
        for ( int i = 0; i < Math.max(v1.length, v2.length); i++ ) {
            int num1 = i < v1.length ? Integer.parseInt( v1[i] ) : 0;
            int num2 = i < v2.length ? Integer.parseInt( v2[i] ) : 0;
            if ( num1 < num2 ) {
                return -1;
            } else if ( num1 > num2 ) {
                return +1;
            }
        } 
        
        return 0;
    }
  • 相关阅读:
    实战 | 使用maven 轻松重构项目
    分布式架构高可用与高并发那些在工作中常用到的那些变态应用
    操作系统的那些灵魂概念,你弄懂了几个?
    应该没人比我更细了吧:带你深入剖析Redis分布式锁!
    我把 Spring Cloud 给拆了!带你详细了解各组件原理!
    深入浅出MySQL灵魂十连问,你真的有把握吗?
    领统Java并发半壁江山的AQS你真的懂了吗?
    不会数据结构?24张图让你彻底弄懂它,还不会你来打我!
    你了解Spring事务传播行为吗?多个方法之间调用事务如何传播?
    深入学习:三分钟快速教会你编写线程安全代码!
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/6114289.html
Copyright © 2011-2022 走看看