题目:
比较两个版本号 version1 和 version2。
如果 version1 > version2
返回 1
,如果 version1 < version2
返回 -1
, 除此之外返回 0
。
你可以假设版本字符串非空,并且只包含数字和 .
字符。
.
字符不代表小数点,而是用于分隔数字序列。
例如,2.5
不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0
。例如,版本号 3.4
的第一级(大版本)和第二级(小版本)修订号分别为 3
和 4
。其第三级和第四级修订号均为 0
。
示例 1:
输入:version1
= "0.1",version2
= "1.1" 输出: -1
示例 2:
输入:version1
= "1.0.1",version2
= "1" 输出: 1
示例 3:
输入:version1
= "7.5.2.4",version2
= "7.5.3" 输出: -1
示例 4:
输入:version1
= "1.01",version2
= "1.001" 输出:0 解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
思路:将字符串中的以.分隔的部分取出来比较大小。但是出现了一些自己没有考虑清楚的问题,还有一些字符串的操作不是很熟练。
代码:
下面是我自己写的代码,但是有问题。我自己的代码没有考虑到一种特殊的情况:“01”,“1”。这种情况应该返回0而不是-1.
class Solution {
public int compareVersion(String version1, String version2) {
int m=version1.length(); //我在这块写错了,字符串计算长度应该是length()
int n=version2.length();
int i=0;
int j=0;
for(;(i<m)&&(j<n);i++,j++){
char temp1=version1.charAt(i);
char temp2=version2.charAt(j);
if(temp1==temp2)
continue;
if(temp1>temp2){
return 1;
}
if(temp1<temp2)
{
return -1;
}
}
return 0;
}
}
之前找的代码好像是有些问题,下面在补充一个包含输入输出的:
import java.util.*; public class xl { public static void main(String[]args){ Scanner sc=new Scanner(System.in); String v1=sc.next(); String v2=sc.next(); int res=compareVersion(v1,v2); System.out.println(res); } public static int compareVersion(String version1, String version2) { String[] a1 = version1.split("\\."); String[] a2 = version2.split("\\."); //注意这块用的是最大的长度 for(int n = 0; n < Math.max(a1.length, a2.length); n++){ //长度不想等的话可以直接补充0 int i = (n < a1.length ? Integer.valueOf(a1[n]) : 0); int j = (n < a2.length ? Integer.valueOf(a2[n]) : 0); if(i < j) return -1; else if(i > j) return 1; } return 0; } }