Another way to describe the problem:
Split the two input numbers by ., then compare them segment by segment. If the number of segments differs, the one with more segments is larger – provided the extra segments contain a non-zero value.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Solution {
public :
void getNums ( string version1 , vector < int > & v1 )
{
int s = 0 ;
int pos = version1 . find ( "." );
while ( - 1 != pos )
{
v1 . push_back ( atoi ( version1 . substr ( s , pos - s ). c_str ()));
s = pos + 1 ;
pos = version1 . find ( "." , pos + 1 );
}
v1 . push_back ( atoi ( version1 . substr ( s ). c_str ()));
}
int compareVersion ( string version1 , string version2 ) {
vector < int > v1 , v2 ;
v1 . clear ();
v2 . clear ();
getNums ( version1 , v1 );
getNums ( version2 , v2 );
int min = v1 . size () > v2 . size () ? v2 . size () : v1 . size ();
for ( int i = 0 ; i < min ; i ++ )
{
if ( v1 [ i ] > v2 [ i ])
{
return 1 ;
}
if ( v1 [ i ] < v2 [ i ])
{
return - 1 ;
}
}
if ( v1 . size () > v2 . size ())
{
for ( int i = min ; i < v1 . size (); i ++ )
{
if ( v1 [ i ] > 0 )
{
return 1 ;
}
}
return 0 ;
}
if ( v1 . size () < v2 . size ())
{
for ( int i = min ; i < v2 . size (); i ++ )
{
if ( v2 [ i ] > 0 )
{
return - 1 ;
}
}
return 0 ;
}
return 0 ;
}
};
Licensed under CC BY-NC-SA 4.0