比较版本号

原题

  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

题目大意

  给定两个版本号,比较两个版本号的大小。.号作为分割符使用,版本号中只有数和.号。

解题思路

  以点号作为分割符,比较相应部分的大小。

代码实现

算法实现类

public class Solution {
    public int compareVersion(String version1, String version2) {
        int indexA = 0; // 记录version1处理的位置
        int indexB = 0; // 记录version2处理的位置
        int countA = 0; // 记录version1的.号之的字符数
        int countB = 0; // 记录version2的.号之的字符数
        int max; // 记录countA和countB之间的较大者
        int a;
        int b;

        while (indexA < version1.length() || indexA < version2.length()) {
            while (indexA < version1.length() && version1.charAt(indexA) != '.') {
                countA++;
                indexA++;
            }
            while (indexB < version2.length() && version2.charAt(indexB) != '.') {
                countB++;
                indexB++;
            }
            max = countA > countB ? countA : countB;
            for (int i = max; i >= 1; i--) { // 从左向右比较
                a = countA - i >= 0 ? version1.charAt(indexA - i) - '0' : 0;
                b = countB - i >= 0 ? version2.charAt(indexB - i) - '0' : 0;
                if (a > b) {
                    return 1;
                } else if (a < b) {
                    return -1;
                }
            }

            countA = 0;
            countB = 0;
            indexA++;
            indexB++;
        }
        return 0;
    }

}

转载于:https://my.oschina.net/u/2822116/blog/812105

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值