题解 | #比较版本号#

比较版本号

https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 比较版本号
# @param version1 string字符串 
# @param version2 string字符串 
# @return int整型
#
class Solution:
    def compare(self , version1: str, version2: str) -> int:
        version1, version2 = version1+".", version2+"."
        v1_n, v2_n = len(version1), len(version2)
        min_l, max_l = min(v2_n, v1_n), max(v1_n, v2_n)
        v1_ints, v2_ints = [], []
        v1_tmp, v2_tmp = 0, 0
        for i in range(min_l):
            if version1[i] != ".":
                v1_tmp = (v1_tmp * 10) + int(version1[i])
            else:
                v1_ints.append(v1_tmp)
                v1_tmp = 0
            
            if version2[i] != ".":
                v2_tmp = (v2_tmp * 10) + int(version2[i])
            else:
                v2_ints.append(v2_tmp)
                v2_tmp = 0
            
        no_comp = version1 if v1_n > v2_n else version2
        ints = v1_ints if v1_n > v2_n else v2_ints
        tmp = v1_tmp if v1_n > v2_n else v2_tmp
        for i in range(min_l, max_l):
            if no_comp[i] != ".":
                tmp = (tmp * 10) + int(no_comp[i])
            else:
                ints.append(tmp)
                tmp = 0
        
        ret = 0
        v1_n, v2_n = len(v1_ints), len(v2_ints)
        for i in range(min(v1_n, v2_n)):
            if v1_ints[i] < v2_ints[i]:
                ret = -1
                break
            elif v1_ints[i] > v2_ints[i]:
                ret = 1
                break
        
        if ret == 0:
            if v1_n == v2_n:
                pass
            elif v1_n > v2_n:
                ret = 1 if v1_ints[-1] != 0 else 0
            else:
                ret = -1 if v2_ints[-1] != 0 else 0
        
        return ret

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务