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 ...
随机推荐
- PHP MySQL Order By 关键词
ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...
- Docker环境 ELK 快速部署
Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...
- Android中软键盘弹出时底部菜单上移问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncrea ...
- 集群技术(三)MySQL集群深度解析
什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committedi ...
- Redis之(一)初识Redis
1.Redis概述 我们知道,内存是电脑主板上的存储部件,用于存储当前正在使用的数据和程序,CPU可以与内存直接沟通,所以访问速速非常高:而外存数据必须加载到内存以后程序才能使用.如果把CPU当做一个 ...
- An internal error occurred during: "Retrieving archetypes:". GC overhead limit exceeded
An internal error occurred during: "Retrieving archetypes:".GC overhead limit exceeded 异常, ...
- SceneKit一个3D场景角色的代码重构
SuperSpaceMan3D是一个以SceneKit为基础的小游戏项目,作者展示了用SceneKit开发3D游戏的强大威力.不过在实际运行时会发现有一些小bug,这里我们依次尝试将其修复 首先,当s ...
- ROS_Kinetic_x ROS栅格地图庫 Grid Map Library
源自:https://github.com/ethz-asl/grid_map Grid Map Overview This is a C++ library with ROS interface t ...
- ListView之侧滑删除
SwipeMenuListView 是一个为listview添加item侧滑菜单的开源库,项目地址:https://github.com/baoyongzhang/SwipeMenuListView ...
- Android初级教程:ViewPage使用详解
转载本博客,请注明出处:http://blog.csdn.net/qq_32059827点击打开链接 ViewPage使用之一就是轮播广告,就以此为出发点,来详细解析一下ViewPage的使用和加载机 ...