Leetcode刷题100天—165. 比较版本号( 双指针)—day25

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—165. 比较版本号( 双指针)—day25相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

165. 比较版本号

难度中等216收藏分享切换为英文接收动态反馈

给你两个版本号 version1version2 ,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.330.1 都是有效的版本号。

比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 010 < 1

返回规则如下:

  • 如果 *version1* > *version2* 返回 1
  • 如果 *version1* < *version2* 返回 -1
  • 除此之外返回 0

示例 1:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1"

示例 2:

输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有指定下标为 2 的修订号,即视为 "0"

示例 3:

输入:version1 = "0.1", version2 = "1.1"
输出:-1
解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2

示例 4:

输入:version1 = "1.0.1", version2 = "1"
输出:1

示例 5:

输入:version1 = "7.5.2.4", version2 = "7.5.3"
输出:-1

提示:

  • 1 <= version1.length, version2.length <= 500
  • version1version2 仅包含数字和 '.'
  • version1version2 都是 有效版本号
  • version1version2 的所有修订号都可以存储在 32 位整数
package 双指针;

import javax.security.auth.x500.X500Principal;

/*
 * https://leetcode-cn.com/problems/compare-version-numbers/
 */
public class _165_比较版本号 {
//	可以用双指针遍历判断两个字符串标点符号前面的数和后面的的数是否对应相等,判断01和001是否相等可以直接用加法就行
//	也就是说我们先将字符变成整数才能判断,version1.charAt(i) - '0'
    public int compareVersion(String version1, String version2) {
//    	定义两个指针
    	int left1=0,left2=0;
//    	获取字符长度
    	int len1=version1.length(),len2=version2.length();
//    	while循环遍历两个字符串
    	while(left1<len1||left2<len2) {
    		
//    		定义一个值来统计逗号前后的数
    		int sum1=0;
//    		通过for循环遍历字符转换成整形数字,直到遇见逗号或字符串末尾结束
    		for(;left1<len1&&version1.charAt(left1)!='.';left1++) {
//    			字符0的ascll是48,比如'1'-'0'=1
    			sum1=sum1*10+(version1.charAt(left1)-'0');
    		}
    		left1++;//跳过逗号
//    		第二个字符串同理
    		int sum2=0;
//    		通过for循环遍历字符转换成整形数字,直到遇见逗号或字符串末尾结束
    		for(;left2<len2&&version2.charAt(left2)!='.';left2++) {
//    			字符0的ascll是48,比如'1'-'0'=1
    			sum2=sum2*10+(version2.charAt(left2)-'0');
    		}
    		left2++;//跳过逗号
//    		最后通过比较sum1和sum2,根据题目要求小于就返回-1大于就返回1
//    		if (sum1<sum2) {
//				return -1;
//    		}else {
//				return 1;
//    		}
    		if (sum1!=sum2) {
//    			三目运算
				return sum1<sum2?-1:1;
			}
    			
    	}    	
//    	如果相等就返回0
    	return 0;
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—165. 比较版本号( 双指针)—day25的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode第165题—比较版本号—Python实现

LeetCode第165题—比较版本号—Python实现

LeetCode第165题—比较版本号—Python实现

LeetCode第165题—比较版本号—Python实现

leetcode 165. 比较版本号

Leetcode No.165 比较版本号