Leetcode_165_Compare Version Numbers
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42342251
Compare two version numbers version1 and version1.
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
思路:
(1)题意为比较版本号大小。但是版本号可以包含多个小数点,例如1.0.0.1和1.0.0.0.2这样的情况也会发生。
(2)判断过程分为几种情况:如果给定的版本号包含“.”,则需要将其中的字符分开并存到链表中,如果不包含,则直接存入链表即可。
(3)两个版本号都存入到链表,遍历较长的链表,进行比较判断,直到从两个链表取出的字符对应的整数值不相等,则返回判断得到的值;如果遍历完较短的链表还未判断出大小,则视较短链表后续元素为0与较长链表进行比较,直到较长链表遍历完成为止,返回对应的值。(由于可能出现类似1.1.0.0.0、1.1.0.0.1和1.1之间的比较,此时必须遍历完较长的链表)
(4)下面简单举例子说明:
对于1.1.0.1和1.1.0
a:对应的链表(以数组表示)为[1,1,0,1]和[1,1,0]
b:遍历完前三次后,其对应的位置上的值都相等,而此时[1,1,0]所有元素都遍历完了,但是还需要继续,将[1,1,0]“第四个位置”元素设为 0进行比较,此时得到1,1,0,1]对应的元素要大于0,即1.1.0.1 > 1.1.0,返回对应结果。
c:类似1.1.1.0和1.1.1.0.0的比较类似,在此不举例子说明。
(5)代码很长,但是思路还是比较清晰的,希望对你有所帮助。
算法代码实现如下:
public static int compareVersion(String version1, String version2) {
List<String> list1 = new LinkedList<String>();
if(version1.contains(".")){
char[] charArray = version1.toCharArray();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < charArray.length; i++) {
if(charArray[i]!='.'){
buffer.append(charArray[i]);
if(i==charArray.length-1){
list1.add(buffer.toString());
}
}else{
list1.add(buffer.toString());
buffer.setLength(0);
}
}
}else{
list1.add(version1);
}
List<String> list2 = new LinkedList<String>();
if(version2.contains(".")){
char[] charArray = version2.toCharArray();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < charArray.length; i++) {
if(charArray[i]!='.'){
buffer.append(charArray[i]);
if(i==charArray.length-1){
list2.add(buffer.toString());
}
}else{
list2.add(buffer.toString());
buffer.setLength(0);
}
}
}else{
list2.add(version2);
}
int max = list1.size() >= list2.size()? list1.size():list2.size();
for (int i = 0; i < max; i++) {
if(list1.size()>=list2.size()){
if(i>list2.size()-1){
if(compare(list1.get(i),"0")==0){
continue;
}else{
return compare(list1.get(i),"0");
}
}else{
if(compare(list1.get(i),list2.get(i))==0){
continue;
}else{
return compare(list1.get(i),list2.get(i));
}
}
}
if(list2.size()>list1.size()){
if(i>list1.size()-1){
if(compare("0",list2.get(i))==0){
continue;
}else{
return compare("0",list2.get(i));
}
}else{
if(compare(list1.get(i),list2.get(i))==0){
continue;
}else{
return compare(list1.get(i),list2.get(i));
}
}
}
}
return 0;
}
public static int compare(String s1, String s2){
int v1 = Integer.parseInt(s1);
int v2 = Integer.parseInt(s2);
if(v1>v2){
return 1;
}else if(v1<v2){
return -1;
}else{
return 0;
}
}
Leetcode_165_Compare Version Numbers的更多相关文章
- [LeetCode] Compare Version Numbers 版本比较
Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...
- 【leetcode】Compare Version Numbers
题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...
- Compare Version Numbers
Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 & ...
- 【leetcode】Compare Version Numbers(middle)
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- ✡ 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 Compare Version Numbers
原题链接在这里:https://leetcode.com/problems/compare-version-numbers/ 用string.split()方法把原有string 从小数点拆成 str ...
- leetcode: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 ...
随机推荐
- git使用之错误分析及解决(持续更新)
错误一: 使用 $ git push -u origin master 出现如下错误: error: src refspec master does not match any. error: fai ...
- Docker服务端防护
运行一个容器或应用程序的核心是通过 Docker 服务端.Docker 服务的运行目前需要 root 权限,因此其安全性十分关键. 首先,确保只有可信的用户才可以访问 Docker 服务.Docker ...
- day08 JSP
day08 JSP 1. jsp 入门和 jsp 运行原理 2. jsp 语法 2.1 jsp 模板元素:jsp 页面中的 html 内容.它定义了网络基本骨架,即定义了页面结构和外观. 2.2 js ...
- Bootstrap3 表单-基本表单
单独的表单控件会被自动赋予一些全局样式.所有设置了 .form-control 类的 <input>.<textarea> 和 <select> 元素都将被默认设置 ...
- Python+Tkinter 密保小工具
上图 代码 核心 编解码方面 Tkinter界面更新 总结 昨天被一同学告知,网上的一个QQ密码库中有我的一条记录,当时我就震惊了,赶紧换了密码.当然了,这件事也给了我一个警示,那就是定期的更换自己的 ...
- 网络爬虫框架Scrapy简介
作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...
- Lua判断OS并添加cpath
Lua判断OS并添加cpath(金庆的专栏)Lua初始化时需要根据OS来设置package.cpath, 如果是Windows系统则添加 ?.dll, 否则添加 ?.so.不然加载错误后缀名的动态库会 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(3)--不总是参数嗅探的错 前面已经提到过关于存储过程在SSMS中运行很 ...
- shell命令执行hive脚本(hive交互,hive的shell编程)
Hive执行方式 Hive的hql命令执行方式有三种: 1.CLI 方式直接执行 2.作为字符串通过shell调用hive –e执行(-S开启静默,去掉"OK","Tim ...
- [线程]Thead 中传参数RuntimeError: thread.__init__() not called
在写一个多线程类的时候调用报错 RuntimeError: thread.__init__() not called class NotifyTread(threading.Thread): def ...