题意:
解题思路:
思路:双指针
1. 分割数组,得到一长一短的2个版本数组;
2. 以较长版本遍历,如果两版本中有空值,则在后面补充0;
3. 再比较两版本数组中的每一个版本的大小;
PHP代码实现:
class Solution {
/**
* @param String $version1
* @param String $version2
* @return Integer
*/
function compareVersion($version1, $version2) {
// return $this->compareVersion1($version1, $version2);
$v1 = explode(".", $version1);
$v2 = explode(".", $version2);
$i = 0;
while ($i < count($v1) && $i < count($v2)) {
if ((int) $v1[$i] > (int) $v2[$i]) return 1;
else if ((int) $v1[$i] < (int) $v2[$i]) {
return -1;
}
$i ++;
}
while (isset($v1[$i])) {
if ((int) $v1[$i++] >= 1) return 1;
}
while (isset($v2[$i])) {
if ((int) $v2[$i++] >= 1) return -1;
}
return 0;
}
function compareVersion1($version1, $version2) {
$v1 = explode('.', $version1);
$v2 = explode('.', $version2);
$max = max(count($v1), count($vers2_arr));
for($i = 0; $i < $max; $i++){
$vs1 = isset($v1[$i]) ? intval($v1[$i]) : 0;
$vs2 = isset($v2[$i]) ? intval($v2[$i]) : 0;
if ($vs1 > $vs2) {
return 1;
} else if ($vs1 < $vs2) {
return -1;
}
}
return 0;
}
}
GO代码实现:
func compareVersion(version1 string, version2 string) int {
vs1 := strings.Split(version1, ".")
vs2 := strings.Split(version2, ".")
for {
if len(vs1) > len(vs2) {
vs2 = append(vs2, "0")
} else if len(vs1) < len(vs2) {
vs1 = append(vs1, "0")
} else {
break
}
}
for i := 0; i < len(vs1); i++ {
v1, _ := strconv.Atoi(vs1[i])
v2, _ := strconv.Atoi(vs2[i])
if v1 > v2 {
return 1
} else if v1 < v2 {
return -1
}
}
return 0
}