题意:
解题思路:
思路:双指针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}