zoukankan      html  css  js  c++  java
  • LeetCode-165 Compare Version Numbers

    题目描述

    Compare two version numbers version1and 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.

    You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

    题目大意

    给两个字符串,字符串中只包含数字和‘.’,其中,‘.’将不同数字分开,分开的数字代表不同的级别,从字符串的左到右级别依次降低,即由‘.’分开的第一个子数字串为最高级别。

    需要对这两个带级别的数字字符串进行大小比较,其中高级别的子串不论数值多少均大于低级别的子串代表的数值大小。若第一个字符串大于第二个字符串返回1,等于返回0,小于返回-1.

    示例

    E1

    Input: version1 = "0.1", version2 = "1.1"
    Output: -1

    E2

    Input: version1 = "1.0.1", version2 = "1"
    Output: 1

    E3

    Input: version1 = "7.5.2.4", version2 = "7.5.3"
    Output: -1

    E4

    Input: version1 = "1.01", version2 = "1.001"
    Output: 0

    E5

    Input: version1 = "1.0", version2 = "1.0.0"
    Output: 0

    解题思路

    遍历一遍即可,同级别进行比较,分别读取由'.'分开的子字符串并进行比较。

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(1)

    代码

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int ans = 0, len1 = version1.length(), len2 = version2.length(), i = 0, j = 0;
            while(i < len1 || j < len2) {
                int sv1 = 0;
                int sv2 = 0;
                int k = i;
                //查询由‘.’分开的相同级别的子字符串,并计算代表的数值大小
                while(k < len1 && version1[k] != '.') {
                    sv1 *= 10;
                    sv1 += (version1[k] - '0');
                    k++;
                }
                i = k + 1;
                k = j;
                while(k < len2 && version2[k] != '.') {
                    sv2 *= 10;
                    sv2 += (version2[k] - '0');
                    k++;
                }
                j = k + 1;
                if(sv1 < sv2) {
                    ans = -1;
                    break;
                }         
                else if(sv1 > sv2) {
                    ans = 1;
                    break;
                }
            }
            
            return ans;
        }
    };
  • 相关阅读:
    复习:C#3.0面向对象测试开发包
    SQL Server 2000实现一则按类似VB VAL函数功能排序的案例
    SQL Server TEXT类型字段字符串替换示例处理脚本
    获取SQL Server服务器的连接信息用脚本(在原邹建写的基础上作一点改进)与一段查询SQL Server服务器阻塞和死锁信息用的脚本
    字符串前部去除自定义函数(TSQL)
    从数据库系统管理的角度上回答数据库是什么
    话说物联网
    赖床狂想记录
    M1非接触式射频存储卡卡唯一号(十六进制值表示),去除其前部为0的自定义函数
    SQLHelper类
  • 原文地址:https://www.cnblogs.com/heyn1/p/10951735.html
Copyright © 2011-2022 走看看