File tree 8 files changed +317
-152
lines changed
8 files changed +317
-152
lines changed Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
3
int translateNum (int num) {
4
- // string s = to_string(num);
5
- // int n = s.size();
6
- // vector<int> dp(n + 1);
7
- // dp[0] = dp[1] = 1;
8
- // for (int i = 2; i <= n; ++i) {
9
- // dp[i] = dp[i - 1];
10
- // if (s[i - 2] == '1' || s[i - 2] == '2' && s[i - 1] < '6') {
11
- // dp[i] += dp[i - 2];
12
- // }
13
- // }
14
- // return dp[n];
15
4
string s = to_string (num);
16
5
int n = s.size ();
17
- int dp_0 = 1 , dp_1 = 1 , dp_2 = 1 ;
18
- for (int i = 2 ; i <= n; ++i) {
19
- dp_2 = dp_1 ;
20
- if (s[i - 2 ] == ' 1' || s[i - 2 ] == ' 2' && s[i - 1 ] < ' 6' ) {
21
- dp_2 += dp_0 ;
6
+ int a = 1 , b = 1 ;
7
+ for (int i = 1 ; i < n; ++i) {
8
+ int c = b ;
9
+ if (s[i - 1 ] == ' 1' || ( s[i - 1 ] == ' 2' && s[i] < ' 6' ) ) {
10
+ c += a ;
22
11
}
23
- dp_0 = dp_1 ;
24
- dp_1 = dp_2 ;
12
+ a = b ;
13
+ b = c ;
25
14
}
26
- return dp_2 ;
15
+ return b ;
27
16
}
28
- };
17
+ };
Original file line number Diff line number Diff line change 1
1
public class Solution {
2
2
public int TranslateNum ( int num ) {
3
- return TranslateString ( num . ToString ( ) ) ;
4
- }
5
-
6
- private int TranslateString ( string s ) {
7
- if ( s . Length < 2 ) {
8
- return 1 ;
3
+ var s = num . ToString ( ) ;
4
+ int n = s . Length ;
5
+ int a = 1 , b = 1 ;
6
+ for ( int i = 1 ; i < n ; ++ i ) {
7
+ int c = b ;
8
+ if ( s [ i - 1 ] == '1' || ( s [ i - 1 ] == '2' && s [ i ] < '6' ) ) {
9
+ c += a ;
10
+ }
11
+ a = b ;
12
+ b = c ;
9
13
}
10
- int t = int . Parse ( s [ ..2 ] ) ;
11
- return t < 10 || t > 25 ? TranslateString ( s [ 1 ..] ) : TranslateString ( s [ 1 ..] ) + TranslateString ( s [ 2 ..] ) ;
14
+ return b ;
12
15
}
13
16
}
Original file line number Diff line number Diff line change
1
+ func translateNum (num int ) int {
2
+ s := strconv .Itoa (num )
3
+ n := len (s )
4
+ a , b := 1 , 1
5
+ for i := 1 ; i < n ; i ++ {
6
+ c := b
7
+ if s [i - 1 ] == '1' || (s [i - 1 ] == '2' && s [i ] < '6' ) {
8
+ c += a
9
+ }
10
+ a , b = b , c
11
+ }
12
+ return b
13
+ }
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public int translateNum (int num ) {
3
- return cal (String .valueOf (num ));
4
- }
5
-
6
- private int cal (String s ) {
7
- int n = s .length ();
8
- if (n < 2 ) {
9
- return 1 ;
3
+ char [] s = String .valueOf (num ).toCharArray ();
4
+ int n = s .length ;
5
+ int a = 1 , b = 1 ;
6
+ for (int i = 1 ; i < n ; ++i ) {
7
+ int c = b ;
8
+ if (s [i - 1 ] == '1' || (s [i - 1 ] == '2' && s [i ] < '6' )) {
9
+ c += a ;
10
+ }
11
+ a = b ;
12
+ b = c ;
10
13
}
11
- int t = Integer .parseInt (s .substring (0 , 2 ));
12
- return t < 10 || t > 25 ? cal (s .substring (1 )) : cal (s .substring (1 )) + cal (s .substring (2 ));
14
+ return b ;
13
15
}
14
16
}
Original file line number Diff line number Diff line change 3
3
* @return {number }
4
4
*/
5
5
var translateNum = function ( num ) {
6
- let res = 0 ;
7
- num = num . toString ( ) ;
8
- function dfs ( i ) {
9
- if ( i >= num . length ) {
10
- res ++ ;
11
- return ;
12
- }
13
- dfs ( i + 1 ) ;
14
- let tmp = + ( num [ i ] + num [ i + 1 ] ) ;
15
- if ( num [ i ] !== '0' && tmp >= 0 && tmp < 26 ) {
16
- dfs ( i + 2 ) ;
6
+ const s = num . toString ( ) ;
7
+ const n = s . length ;
8
+ let a = 1 ;
9
+ let b = 1 ;
10
+ for ( let i = 1 ; i < n ; ++ i ) {
11
+ let c = b ;
12
+ if ( s [ i - 1 ] === '1' || ( s [ i - 1 ] === '2' && s [ i ] < '6' ) ) {
13
+ c += a ;
17
14
}
15
+ a = b ;
16
+ b = c ;
18
17
}
19
- dfs ( 0 ) ;
20
- return res ;
18
+ return b ;
21
19
} ;
Original file line number Diff line number Diff line change 1
1
class Solution :
2
2
def translateNum (self , num : int ) -> int :
3
- def cal (s ):
4
- if len (s ) < 2 :
5
- return 1
6
- t = int (s [:2 ])
7
- return cal (s [1 :]) if t < 10 or t > 25 else cal (s [1 :]) + cal (s [2 :])
8
-
9
- return cal (str (num ))
3
+ s = str (num )
4
+ n = len (s )
5
+ a = b = 1
6
+ for i in range (1 , n ):
7
+ c = b
8
+ if s [i - 1 ] == "1" or (s [i - 1 ] == "2" and s [i ] < "6" ):
9
+ c += a
10
+ a , b = b , c
11
+ return b
Original file line number Diff line number Diff line change 1
1
function translateNum ( num : number ) : number {
2
+ const s = num . toString ( ) ;
3
+ const n = s . length ;
2
4
let a = 1 ;
3
5
let b = 1 ;
4
- const str = num + '' ;
5
- for ( let i = 1 ; i < str . length ; i ++ ) {
6
- const val = Number ( str [ i - 1 ] + str [ i ] ) ;
7
- if ( val >= 10 && val < 26 ) {
8
- [ a , b ] = [ b , a + b ] ;
9
- } else {
10
- a = b ;
6
+ for ( let i = 1 ; i < n ; ++ i ) {
7
+ let c = b ;
8
+ if ( s [ i - 1 ] === '1' || ( s [ i - 1 ] === '2' && s [ i ] < '6' ) ) {
9
+ c += a ;
11
10
}
11
+ a = b ;
12
+ b = c ;
12
13
}
13
14
return b ;
14
15
}
You can’t perform that action at this time.
0 commit comments