Skip to content

Commit 18b5e58

Browse files
committed
feat: add cpp solution to lcof problems: No.44,46
1 parent f346eed commit 18b5e58

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

lcof/面试题44. 数字序列中某一位的数字/README.md

+21
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,27 @@ var findNthDigit = function (n) {
119119
};
120120
```
121121

122+
### **C++**
123+
124+
```cpp
125+
class Solution {
126+
public:
127+
int findNthDigit(int n) {
128+
int digit = 1;
129+
long long start = 0;
130+
long long count = 10;
131+
while (n > count) {
132+
n -= count;
133+
++digit;
134+
start = start == 0 ? 10 : start * 10;
135+
count = 9 * start * digit;
136+
}
137+
long long num = start + n / digit;
138+
return to_string(num)[n % digit] - '0';
139+
}
140+
};
141+
```
142+
122143
### **...**
123144
124145
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int findNthDigit(int n) {
4+
int digit = 1;
5+
long long start = 0;
6+
long long count = 10;
7+
while (n > count) {
8+
n -= count;
9+
++digit;
10+
start = start == 0 ? 10 : start * 10;
11+
count = 9 * start * digit;
12+
}
13+
long long num = start + n / digit;
14+
return to_string(num)[n % digit] - '0';
15+
}
16+
};

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

+35
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,41 @@ var translateNum = function (num) {
8888
};
8989
```
9090

91+
### **C++**
92+
93+
注释的代码是一维 dp ,因为 `dp[i]` 只依赖 `dp[i - 1]``dp[i - 2]` ,所以可以进一步压缩空间。
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
int translateNum(int num) {
99+
// string s = to_string(num);
100+
// int n = s.size();
101+
// vector<int> dp(n + 1);
102+
// dp[0] = dp[1] = 1;
103+
// for (int i = 2; i <= n; ++i) {
104+
// dp[i] = dp[i - 1];
105+
// if (s[i - 2] == '1' || s[i - 2] == '2' && s[i - 1] < '6') {
106+
// dp[i] += dp[i - 2];
107+
// }
108+
// }
109+
// return dp[n];
110+
string s = to_string(num);
111+
int n = s.size();
112+
int dp_0 = 1, dp_1 = 1, dp_2 = 1;
113+
for (int i = 2; i <= n; ++i) {
114+
dp_2 = dp_1;
115+
if (s[i - 2] == '1' || s[i - 2] == '2' && s[i - 1] < '6') {
116+
dp_2 += dp_0;
117+
}
118+
dp_0 = dp_1;
119+
dp_1 = dp_2;
120+
}
121+
return dp_2;
122+
}
123+
};
124+
```
125+
91126
### **...**
92127
93128
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public:
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+
string s = to_string(num);
16+
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;
22+
}
23+
dp_0 = dp_1;
24+
dp_1 = dp_2;
25+
}
26+
return dp_2;
27+
}
28+
};

0 commit comments

Comments
 (0)