165. Compare Version Numbers

时间:2021-06-30 03:22:41

题目:

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

链接: http://leetcode.com/problems/compare-version-numbers/

题解:

比较版本大小。这道题目可以把输入两个string split一下,注意因为"."是特殊regex,所以要用"\\."。Split完毕以后比较array每个对应元素的大小就可以了。

Time Complexity - O(n), Splace Complexity - O(n)。

public class Solution {
public int compareVersion(String version1, String version2) {
if(version1 == null || version2 == null)
return 0;
String[] version1Arr = version1.split("\\.");
String[] version2Arr = version2.split("\\.");
int i = 0, j = 0; while(i < version1Arr.length || j < version2Arr.length) {
int ver1 = i < version1Arr.length ? Integer.parseInt(version1Arr[i]) : 0;
int ver2 = j < version2Arr.length ? Integer.parseInt(version2Arr[i]) : 0;
if(ver1 < ver2)
return -1;
else if(ver1 > ver2)
return 1;
i++;
j++;
} return 0;
}
}

假如不想用split,那么可以节约space complexity。这里我们不用parseInt,要使用手动计算每个level version的数字,然后加以比较。

Time Complexity - O(n), Space Complexity - O(1)

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

题外话:  双11特意Work from home在家抢宝贝,不过总觉得没啥可买的,浏览来浏览去,到最后也只花了600多块,买了几本书和一个行车记录仪...不够阔气啊,于是订了Jewel Bako明天去找找感觉。

二刷:

方法跟一刷一样

Java:

Time Complexity - O(n), Splace Complexity - O(n)。

public class Solution {
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null) {
return 0;
}
String[] ver1Arr = version1.split("\\.");
String[] ver2Arr = version2.split("\\.");
int len1 = ver1Arr.length, len2 = ver2Arr.length, lo1 = 0, lo2 = 0;
while (lo1 < len1 || lo2 < len2) {
int ver1 = lo1 < len1 ? Integer.parseInt(ver1Arr[lo1]) : 0;
int ver2 = lo2 < len2 ? Integer.parseInt(ver2Arr[lo2]) : 0;
if (ver1 < ver2) {
return -1;
} else if (ver1 > ver2) {
return 1;
} else {
lo1++;
lo2++;
}
}
return 0;
}
}

不用split

Time Complexity - O(n), Space Complexity - O(1)

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

三刷:

Java:

public class Solution {
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null) return 0;
String[] v1s = version1.split("\\.");
String[] v2s = version2.split("\\.");
int i = 0, j = 0, res = 0;
while (i < v1s.length || j < v2s.length) {
int ver1 = i < v1s.length ? Integer.valueOf(v1s[i++]) : 0;
int ver2 = j < v2s.length ? Integer.valueOf(v2s[j++]) : 0;
if (ver1 < ver2) return -1;
else if (ver1 > ver2) return 1;
}
return 0;
}
}

Reference:

http://www.fromdev.com/2009/10/playing-with-java-string-split-basics.html

165. Compare Version Numbers的更多相关文章

  1. 【LeetCode】165&period; Compare Version Numbers 解题报告(Python)

    [LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  2. 【刷题-LeetCode】165 Compare Version Numbers

    Compare Version Numbers Compare two version numbers version1 and version2. If *version1* > *versi ...

  3. ✡ leetcode 165&period; Compare Version Numbers 比较两个字符串数字的大小 --------- java

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  4. Java for LeetCode 165 Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  5. 【LeetCode】165 - Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  6. Java &lbrack;Leetcode 165&rsqb;Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...

  7. 【一天一道LeetCode】&num;165&period; Compare Version Numbers

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  8. 165&period; Compare Version Numbers &lpar;String&rpar;

    Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 & ...

  9. &lbrack;leet code 165&rsqb;Compare Version Numbers

    1 题目 Compare two version numbers version1 and version2.If version1 > version2 return 1, if versio ...

随机推荐

  1. javascript学习之BOM

    BOM是browser object model的缩写,简称浏览器对象模型.先看看下面这张图 window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象. ...

  2. Java链接MySQL练习题:格式化日期、性别;避免代码注入

    一.查询人员名单,按序号 姓名 性格(男或女) 民族(某族) 生日(年月日)输出 import java.sql.*; import java.text.SimpleDateFormat; publi ...

  3. HDU 5802 Windows 10

    传送门 Windows 10 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  4. spring与mybatis,strut2整合连接sqlserver不的不说的那点事儿

    今天在通过spring与mybatis整合中,想连接下公司用的sqlserver数据库,结果使用Junit测发现没连上,于是就有了下面的问题: 准备工作都已经做好了 web中spring的监听配置了 ...

  5. Linux下编译安装qemu和libvirt

    目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3  ...

  6. C语言mktime&lpar;&rpar;

    最近在调试stm32L151单片机,因为业务需要将从RTC获取的时间转换成时间戳.转换的时候发现获取的时间一直不对.一直被两个问题困扰. 1.从RTC获取出来的月份为什么比实际月份小1? 2.转换得来 ...

  7. SAP MM 无价值物料管理的一种实现思路

    SAP MM 无价值物料管理的一种实现思路 笔者所在的项目,客户工厂处于先期试生产阶段,尚未开始大规模的商业化生产,但是这并不影响客户集团总部的SAP项目实施.笔者于7月初加入该工厂的第2期SAP项目 ...

  8. Libevent源码分析系列【转】

    转自:https://www.cnblogs.com/zxiner/p/6919021.html 1.使用libevent库     源码那么多,该怎么分析从哪分析呢?一个好的方法就是先用起来,会用了 ...

  9. phpstrom 激活

    最新(2017年5月)PhpStorm 2017.1.2 .WebStorm 2017.1.PyCharm  2016.3激活方式 打开网址 http://idea.lanyus.com/ 选择获取注 ...

  10. python&plus;opencv 运行环境搭建

    1:安装pycharm,验证码你懂的 2:安装python3.5以上,或3.6,python2和3 的版本差异还蛮大 3:安装opencv,如下图 以上是方法一,还有之中方法是下载whl文件再手动安装 ...