165. Compare Version Numbers
题目:
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的更多相关文章
- 【LeetCode】165. Compare Version Numbers 解题报告(Python)
[LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 165. Compare Version Numbers - LeetCode
Question 165. Compare Version Numbers Solution 题目大意: 比较版本号大小 思路: 根据逗号将版本号字符串转成数组,再比较每个数的大小 Java实现: p ...
- 【刷题-LeetCode】165 Compare Version Numbers
Compare Version Numbers Compare two version numbers version1 and version2. If *version1* > *versi ...
- ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- Java for LeetCode 165 Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- 【LeetCode】165 - Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- Java [Leetcode 165]Compare Version Numbers
题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...
- 【一天一道LeetCode】#165. Compare Version Numbers
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...
- 165. Compare Version Numbers (String)
Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 & ...
随机推荐
- Apache 流媒体 拖动模块编译
Windows使用apxs独立编译 Apache 模块 http://blog.sina.com.cn/s/blog_43b83d340100mdhl.html 安装 apxs 1.解压apxs.zi ...
- FreeMarker在JAVA中应用入门
在项目中通常有生成XML文件发送到另一个系统的需求,简单的办法可以是用一个XML模板,通过Freemarker替换其中的'Mark'(${}),生成最终的XML文件. 下面记录了一下简单的示例步骤: ...
- 学习C++ Primer 的个人理解(二)
本身就一定基础的读者我想变量常量这些概念应该已经不是问题了.但是本章还是有几个重点,需要特别留意一下的: 1.初始化和赋值是不同的操作 2.任何非0值都是true 3.使用新标准列表初始化,在有丢失精 ...
- OpenJudge 2803 碎纸机 / Poj 1416 Shredding Company
1.链接地址: http://poj.org/problem?id=1416 http://bailian.openjudge.cn/practice/2803 2.题目: 总时间限制: 1000ms ...
- [转]select模型的一种技巧运用-libevent
参见网址 http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html
- Mac下修改默认的Java版本
今天在安装Elicpse IDE的时候,发现提示安装的Java版本不支持,于是在官方去下载了Jre最新版本并安装,在安装完过后再次打开Elicpse发现提示还是不正确,如果用Google查询到一些资料 ...
- linux系统制作简单流程
制作嵌入式平台使用的Linux内 核, 方法和制作PC平台 的Linux内 核基本一致, 下面使用 对比的方式介绍如何制作用 于6410开发板的内 核. 1. 清除原有配置与中间文件x86: make ...
- Java Web开发之详解JSP
JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...
- 转.....IOC 和DI
引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...
- 基于Hadoop生态圈的数据仓库实践 —— ETL
使用Hive转换.装载数据 1. Hive简介 (1)Hive是什么 Hive是一个数据仓库软件,使用SQL读.写.管理分布式存储上的大数据集.它建立在Hadoop之上,具有以下功能和 ...