Skip to content

Commit 3701915

Browse files
committed
feat: add solutions to lcof problem: No.46
1 parent bb50ac7 commit 3701915

File tree

8 files changed

+317
-152
lines changed

8 files changed

+317
-152
lines changed

lcof/面试题46. 把数字翻译成字符串/README.md

+245-88
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,17 @@
11
class Solution {
22
public:
33
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];
154
string s = to_string(num);
165
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;
2211
}
23-
dp_0 = dp_1;
24-
dp_1 = dp_2;
12+
a = b;
13+
b = c;
2514
}
26-
return dp_2;
15+
return b;
2716
}
28-
};
17+
};
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
public class Solution {
22
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;
913
}
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;
1215
}
1316
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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 numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
class Solution {
22
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;
1013
}
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;
1315
}
1416
}

lcof/面试题46. 把数字翻译成字符串/Solution.js

+11-13
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@
33
* @return {number}
44
*/
55
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;
1714
}
15+
a = b;
16+
b = c;
1817
}
19-
dfs(0);
20-
return res;
18+
return b;
2119
};
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
class Solution:
22
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 numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
function translateNum(num: number): number {
2+
const s = num.toString();
3+
const n = s.length;
24
let a = 1;
35
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;
1110
}
11+
a = b;
12+
b = c;
1213
}
1314
return b;
1415
}

0 commit comments

Comments
 (0)