本文是从零开始刷力扣系列的第三部分,欢迎大家一起讨论、吐槽、提出宝贵意见。在看本篇题解之前,小伙伴们也可以先看看我对刷题顺序的建议。有没有人一起从零开始刷力扣

同样是765432,在不同进制下,代表不同的数:在10进制数下,代表。在8进制数下,代表。在16进制数下,代表。
k进制转换为十进制的办法比较简单,直接对应位乘上对应的系数就可以了。参考代码如下:
int ret = 0;
for (int i = 0; i < s.length(); i++) {
ret = ret * k + s[i] - '0';
}
return ret;先思考一个问题,怎么提取k进制的第i位?我们以一个例子来分析这个问题。提取十进制的第2位(从右往左,下标从0开始计算,即百位)。显然,这个数等于。同样,的第3位是。所以,将十进制转换位k进制,我们可以从开始枚举系数,对求模,得到即为第位数。k进制正整数字符串转为十进制的代码如下:
if (num == 0) {
return "0";
}
string ret;
while (num > 0) {
ret = (char)(num % k + '0') + ret;
num /= k;
}
return ret;在这部分题目中,关键考察进制转换,进制的理解,以及对数字位的提取与分析。
这部分题目主要考察对数字的敏感度,以及找规律的能力。
| 链接 |
|---|
| 492. 构造矩形 |
| 29. 两数相除 |
| 507. 完美数 |
| 258. 各位相加 |
| 319. 灯泡开关 |
| 题解 |
对于求模,有以下的性质:
快速幂用于求,一般是很大的数。那么,我们可以将分解成进制求和的形式(一般k为2)即。由于,所以。之后,我们将所有的累乘到结果中即可。若要求模,则应用上述的性质2。
| 链接 |
|---|
| 50. Pow(x, n) |
| 372. 超级次方 |
| 题解 |