题目的链接在这里:https://leetcode-cn.com/problems/distribute-candies/
题目大意
给你两个版本号 version1 和 version2 ,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 1 ,0 < 1 。
一、示意图
二、解题思路
java实现(但需要修改)
代码如下:
class Solution {
public int compareVersion(String version1, String version2) {
//其实是可以他拿来直接当做字符串数组来比较的,也就是先比一个第一个.之前的数组
//看他们的值是否相同,甚至可以说是,用来比两个.之间的数组,他们是否相同
//可以写两个方法,第一个方法是把字符串变成int数字,第二个方法就是两者之间比较
//网上看了一下,可以用正则表达式来截取,所以还想到一个方法就是,把每个字符串都用正则表达式表示出来,然后直接把他们都合到一块,直接用加法的形式(可能会出现一点点错误)来比较两者的大小
//这里有这个细节
String[]vers1=version1.split("\\.");
String[]vers2=version2.split("\\.");
//先直接把他们分割开
//再写一个方法来返回他们的值,也就是Int的方法,这里方法也需要修改了
int v1=getNum(vers1,vers2);
return v1;
}
//这个方法是用来得到每个字符串数组的值的综合,考虑到之前的用加法不太稳健的前提之下,
//把参数设置成两个,然后再每一个分割里进行对比
public static int getNum(String[] num1,String[]num2){
int len1=num1.length;
int len2=num2.length;
//把这个方法修改一下,直接用来比较,用while来,然后如果相同,就继续比较,如果不同的话,就按照大小来比,然后退出
int i=0;
int j=0;
while(i<len1&&j<len2){
//三类情况来看,如果相同就不用管,如果不同的话,按照大小来管
int res1=Integer.parseInt(num1[i]);
int res2=Integer.parseInt(num2[j]);
if(res1>res2){
return 1;
//如果这两个相同的话就继续
}
else if(res1<res2){
return -1;
}
else{
i++;
j++;
}
}
//经过测试,发现这里也需要再改改
if(i==j)
return 0;
else{
}
}
}