1. 程式人生 > 實用技巧 >leetcode 165. Compare Version Numbers

leetcode 165. Compare Version Numbers

Compare two version numbersversion1andversion2.
Ifversion1>version2return1;ifversion1<version2return-1;otherwise return0.

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.5is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

You may assume the default revision number for each level of a version number to be0. For example, version number3.4has a revision number of3and4for its first and second level revision number. Its third and fourth level revision number are both0

.

Example 1:

Input: version1 = "0.1", version2 = "1.1"
Output: -1

Example 2:

Input: version1 = "1.0.1", version2 = "1"
Output: 1

Example 3:

Input: version1 = "7.5.2.4", version2 = "7.5.3"
Output: -1

Example 4:

Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”

Example 5:

Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"

Note:

  1. Version strings are composed of numeric strings separated by dots.and this numeric stringsmayhave leading zeroes.
  2. Version strings do not start or end with dots, and they will not be two consecutive dots.

題目歸類:簡單題

題目大意:比較版本數的大小。

思路:硬編碼。比較相同位置的數值大小

C++程式碼:

 1 class Solution {
 2 public:
 3     int compareVersion(string version1, string version2) {
 4         int flag = 0;
 5         int s1 = 0, s2 = 0;
 6         int len1 = version1.length(), len2 = version2.length();
 7         while (s1 < len1 || s2 < len2) {
 8             int n1 = 0, n2 = 0;
 9             while ((s1 < len1) && (version1[s1] != '.')) {
10                 n1 = n1 * 10 + (version1[s1] - '0');
11                 ++s1;
12             }
13             while ((s2 < len2) && (version2[s2] != '.')) {
14                 n2 = n2 * 10 + (version2[s2] - '0');
15                 ++s2;
16             }
17             if (n1 > n2) {
18                 flag = 1;
19                 break;
20             } 
21             else if (n1 < n2) {
22                 flag = -1;
23                 break;
24             } 
25             ++s1;
26             ++s2;
27         }
28         return flag;
29     }
30 };