Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not “two and a half” or “half way to version three”, it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
git
给定两个版本号,比较两个版本号的大小。.
号做为分割符使用,版本号中只有数和.
号。算法
以点号做为分割符,比较相应部分的大小。spa
算法实现类.net
public class Solution { public int compareVersion(String version1, String version2) { int indexA = 0; // 记录version1处理的位置 int indexB = 0; // 记录version2处理的位置 int countA = 0; // 记录version1的.号之的字符数 int countB = 0; // 记录version2的.号之的字符数 int max; // 记录countA和countB之间的较大者 int a; int b; while (indexA < version1.length() || indexA < version2.length()) { while (indexA < version1.length() && version1.charAt(indexA) != '.') { countA++; indexA++; } while (indexB < version2.length() && version2.charAt(indexB) != '.') { countB++; indexB++; } max = countA > countB ? countA : countB; for (int i = max; i >= 1; i--) { // 从左向右比较 a = countA - i >= 0 ? version1.charAt(indexA - i) - '0' : 0; b = countB - i >= 0 ? version2.charAt(indexB - i) - '0' : 0; if (a > b) { return 1; } else if (a < b) { return -1; } } countA = 0; countB = 0; indexA++; indexB++; } return 0; } }