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 & ...
随机推荐
- ubuntu 16.04 chrome flash player 过期
今天手贱更新了系统,发现chrome flash插件过期了 解决方法: 使用全局代理打开 chrome $: google-chrome --proxy-server="socks5://1 ...
- WCF编程系列(二)了解WCF
WCF编程系列(二)了解WCF 面向服务 服务是复用进化的结果,起初的复用是函数,面向对象编程的出现使复用从函数上升到对象,随后面向组件编程又将复用从对象上升到组件,现在面向服务编程将复用 ...
- dubbo监控活跃线程数
telnet对应dubbo服务的ip+端口号 status -l 其中的active就是当前的活跃线程数 通过程序定时探测写入DB,再查询渲染出来就好了 监控报警,如果已经有监控平台,可以通过一定的规 ...
- thymeleaf的初次使用(带参请求以及调用带参js方法)
之前对于前端框架接触较少,第一次接触thymeleaf,虽说看起来并不复杂但我还是花费了好一会儿才弄懂. 话不多少下面就简单说一下我在项目中的应用. 首先是java代码 controller层 将需要 ...
- debian 学习记录-2 -账户 -关机
linux考虑系统安全设定了root账号和user账号 权限较低的user账号下,连关机命令都执行不了…… 用户切换... 用户切换1 命令su(在user账号下,即可开启root账号模式) 用户切换 ...
- Putty终端 模拟 远程登录 虚拟机Linux
1.虚拟机设置 虚拟机设置->网络适配器->选择Host-only:与主机共享一个私有网络 桥接.NAT.Host-only三种网络模式的说明: (1)桥接:表示在局域网内是一台真实的系统 ...
- WCF SOA服务应用
WCF是微软官方推出的一个基于服务的整合框架,它整合了以前的Web Service.MSMQ.Remoting等通信技术,通过灵活的配置,让服务编程更加容易.可扩展.这篇文章主要目的就是带领大家从开发 ...
- Newtonsoft.Json.dll解析json的dll文件使用
要解析的json //解析前 //解析前 {,,,,,,,,,,},,,,,,,,,,,},,,,,,,,,,,,,,,,},,,,,,,,,},,,,,,,,,,,,},,,,,,,,,,,},,, ...
- trigger
trigger() 方法触发被选元素的指定事件 <html><head><script type="text/javascript" src=&quo ...
- python(二)基础
1.lambda表达式(一般格式为冒号前边是参数冒号后边是返回值) 单参数: 多参数: 我们如果实现一个普通的filter过滤函数过滤掉偶数: 而我们如果用lambda表达式就很简便: 2.递归 普通 ...