题意:

image.png

解题思路:

  1. 思路:双指针
  2. 1. 分割数组,得到一长一短的2个版本数组;
  3. 2. 以较长版本遍历,如果两版本中有空值,则在后面补充0
  4. 3. 再比较两版本数组中的每一个版本的大小;

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param String $version1
  4. * @param String $version2
  5. * @return Integer
  6. */
  7. function compareVersion($version1, $version2) {
  8. // return $this->compareVersion1($version1, $version2);
  9. $v1 = explode(".", $version1);
  10. $v2 = explode(".", $version2);
  11. $i = 0;
  12. while ($i < count($v1) && $i < count($v2)) {
  13. if ((int) $v1[$i] > (int) $v2[$i]) return 1;
  14. else if ((int) $v1[$i] < (int) $v2[$i]) {
  15. return -1;
  16. }
  17. $i ++;
  18. }
  19. while (isset($v1[$i])) {
  20. if ((int) $v1[$i++] >= 1) return 1;
  21. }
  22. while (isset($v2[$i])) {
  23. if ((int) $v2[$i++] >= 1) return -1;
  24. }
  25. return 0;
  26. }
  27. function compareVersion1($version1, $version2) {
  28. $v1 = explode('.', $version1);
  29. $v2 = explode('.', $version2);
  30. $max = max(count($v1), count($vers2_arr));
  31. for($i = 0; $i < $max; $i++){
  32. $vs1 = isset($v1[$i]) ? intval($v1[$i]) : 0;
  33. $vs2 = isset($v2[$i]) ? intval($v2[$i]) : 0;
  34. if ($vs1 > $vs2) {
  35. return 1;
  36. } else if ($vs1 < $vs2) {
  37. return -1;
  38. }
  39. }
  40. return 0;
  41. }
  42. }

GO代码实现:

  1. func compareVersion(version1 string, version2 string) int {
  2. vs1 := strings.Split(version1, ".")
  3. vs2 := strings.Split(version2, ".")
  4. for {
  5. if len(vs1) > len(vs2) {
  6. vs2 = append(vs2, "0")
  7. } else if len(vs1) < len(vs2) {
  8. vs1 = append(vs1, "0")
  9. } else {
  10. break
  11. }
  12. }
  13. for i := 0; i < len(vs1); i++ {
  14. v1, _ := strconv.Atoi(vs1[i])
  15. v2, _ := strconv.Atoi(vs2[i])
  16. if v1 > v2 {
  17. return 1
  18. } else if v1 < v2 {
  19. return -1
  20. }
  21. }
  22. return 0
  23. }