165. Compare Version Numbers [easy] (Python)
2016-05-04 10:43
309 查看
题目链接
https://leetcode.com/problems/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.5is 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
题目翻译
比较 version1 和 version2 这两个“版本号”的大小。version1 > version2 返回 1,version1 < version2 返回 -1,否则返回 0。假定版本号字符串非空,且仅包含 符号“.”和数字。这里 符号“.”不代表小数点,而是数字串的分隔符。比如“2.5”指的是一阶版本号为2,二阶版本号为5。
这里有一个版本号排序的例子:0.1 < 1.1 < 1.2 < 13.37
思路方法
这个问题虽然简单,但很容易考虑不周,主要是:1,版本号可能有0或多个小数点;2,两个版本号小数点个数可能不一样多;3,不同位置0的含义要注意 。比如,我觉得下面几个例子要特别注意:
1 等于 1.0 等于 1.0.000.00
1 等于 01 等于 000001
1.1 小于 1.10 小于 1.100000
思路一
版本号是分层的,所以可以将两个字符串按照“.”分割成子串数组,分层比较。为了消除每层的前导0的影响可以将每层转换为整数进行比较;当然还要考虑两个子串数组长度可能不同,可以对短的补0处理。代码一
class Solution(object): def compareVersion(self, version1, version2): """ :type version1: str :type version2: str :rtype: int """ v1_list = version1.split('.') v2_list = version2.split('.') for i in range(0, max(len(v1_list), len(v2_list))): v1 = int(v1_list[i]) if len(v1_list) > i else 0 v2 = int(v2_list[i]) if len(v2_list) > i else 0 if v1 > v2: return 1 elif v1 < v2: return -1 return 0
另外,想到我们用的是 Python,实际上可以直接比较两个数组的大小,上面的思路也可以这么写代码:
代码二
class Solution(object): def compareVersion(self, version1, version2): """ :type version1: str :type version2: str :rtype: int """ v1_list = [int(v) for v in version1.split('.')] v2_list = [int(v) for v in version2.split('.')] max_len = max(len(v1_list), len(v2_list)) if len(v1_list) == max_len: v2_list += [0]*(max_len - len(v2_list)) else: v1_list += [0]*(max_len - len(v1_list)) if v1_list != v2_list: return 0 else: return 1 if v1_list > v2_list else -1
思路二
不先分割整个字符串再逐个处理,而是一边分割一边处理。可以用迭代或者递归实现该过程。下面的代码用递归实现。代码
class Solution(object): def compareVersion(self, version1, version2): """ :type version1: str :type version2: str :rtype: int """ if version1 == version2: return 0 ind_1 = version1.find('.') ind_2 = version2.find('.') part_1 = version1[0:ind_1] if ind_1 != -1 else version1 part_2 = version2[0:ind_2] if ind_2 != -1 else version2 if int(part_1) == int(part_2): remain_1 = version1[len(part_1)+1:] if version1[len(part_1)+1:] != '' else '0' remain_2 = version2[len(part_2)+1:] if version2[len(part_2)+1:] != '' else '0' return self.compareVersion(remain_1, remain_2) else: return 1 if int(part_1) > int(part_2) else -1
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:/article/11857810.html
相关文章推荐
- 图文讲解选择排序算法的原理及在Python中的实现
- Python——正则表达式
- Python安装BeautifulSoup库(Windows平台下)
- 浅谈插入排序算法在Python程序中的实现及简单改进
- python文件的读写与合并
- Python中使用插入排序算法的简单分析与代码示例
- 如何在virtualenv虚拟环境中安装mysql-python
- windows python tornado的安装no module named singledispatch错误
- python set集合的基本操作
- python 学习笔记记录(二)
- python中re模块的使用
- Python批量重命名文件示例
- Python.with.context-manager
- python中的生成器yield
- 作业1+2.四则运算(改进后完整版,用python写的)_064121陶源
- Python中使用插入排序算法的简单分析与代码示例
- 浅谈插入排序算法在Python程序中的实现及简单改进
- 图文讲解选择排序算法的原理及在Python中的实现
- Python手机号码归属地查询代码
- Python编程中归并排序算法的实现步骤详解