165. Compare Version Numbers
一、题目
1、审题
2、分析
给出两个非空的且只包含数字、点号的版本号,比较版本号的大小。
二、解答
1、思路:
方法一、
①、以 split 切割字符串成数组;按顺序对两个数组中字符串进行比较;
②、,短版本号的后边默认为 0,继续比较;
public int compareVersion(String version1, String version2) { String[] arr1 = version1.split("\\."); // 以 “.” 切割字符串 String[] arr2 = version2.split("\\."); int length = Math.max(arr1.length, arr2.length); for (int i = 0; i < length; i++) { Integer v1 = i < arr1.length ? Integer.parseInt(arr1[i]) : 0; Integer v2 = i < arr2.length ? Integer.parseInt(arr2[i]) : 0; int compare = v1.compareTo(v2); if(compare != 0) return compare; } return 0; }
方法二、
①、将每一个 “.” 分割成的数字字符串拼接成整数,按顺序对两个字符串进行比较;
②、短版本号的后边默认为 0;
public int compareVersion(String version1, String version2) { Integer tmp1 = 0, tmp2 = 0; int len1 = version1.length(), len2 = version2.length(); int i = 0, j = 0; while(i < len1 || j < len2) { tmp1 = 0; tmp2 = 0; while(i < len1 && version1.charAt(i) != '.') tmp1 = tmp1 * 10 + (version1.charAt(i++) - '0'); while(j < len2 && version2.charAt(j) != '.') tmp2 = tmp2 * 10 + (version2.charAt(j++) - '0'); int compare = tmp1.compareTo(tmp2); if(compare != 0) return compare; i++; // 跳过 "." j++; } return 0; }