既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
给你一个十进制数,转化成7进制数的字符串
输入:100
输出:“202” —解释:100 = 2 * 49 + 0 * 7 + 2 * 1
Java API :
return Integer.toString(num, 7);
进制转换一般利用除法和取模进行计算, 类似十进制取出每位的数。取出七进制每位的数再拼接起来就行了。
while (num != 0) {
sb.append(num % 7); //最低位到最高位
num /= 7;
}
172.阶乘后的零👐
给你一个整数,求这个数的阶乘结尾有几个0;
尾部的 0 是 由 2 x 5 而来的, 把阶乘中每个数都拆成质数相乘,统计有多少个 2 和 5. 由于 2 的个数一定是远多于 5 的个数的,所有只需统计 5 的个数。 6 之前有 1 个 5 , 25 之前有 6个5【5、10、15、20、5、5】
public int trailingZeroes(int n) {
return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
}
326.3的幂👊
判断一个数,是否是3的整数次方。
两种办法:
- 利用对数,
log
3
n
=
m
\log_3^n = m
log3n=m, 如果 n 是 3 的整数次方,那么m一定是整数。由换底公式:
log
3
n
=
log
10
n
log
10
3
\log_3^n = \frac{\log_{10}^n}{ \log_{10}^3}
log3n=log103log10n
2. 由于3的幂次的质因子只有3,利用3的次方的最大数, 在 int 范围 3的最大次方数是
3
19
3^{19}
319, 如果 n 是 3 的整数次方,那么一定能被这个数整除,反正亦然,注意 n 小于0 的情况直接返回。
double tem = Math.log10(n) / Math.log10(3);
return tem == (int)tem;
1.4 随机与采样
384.打乱数组👐
给你一个数组, 实现两个指令函数,第一个随机打乱这个数组,第二个恢复这个数组。
把原始数组保存下来,恢复的时候直接恢复。打乱数组可以用洗牌算法
。即遍历数组,把位置 i 的数字和其他随机位置的数字交换。
打乱数组代码:
public int[] shuffle() {
int[] tem = nums.clone();
for(int i = 0; i < tem.length; i++) {
swap(i, r.nextInt(tem.length), tem); //位置 i 数字 和 随机位置交换
}
return tem;
}
练习
168.Excel表列名称👊
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
A – 1
Z – 26
AA–27
AB–28
26进制变种, 注意这里是1-26, 不是0-25, 所有取余和相除的时候得注意
char[] arr = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
StringBuilder sb = new StringBuilder();
while(columnNumber != 0) {
int num = ((columnNumber % 26 - 1) + 26) % 26; // 余1 对应 0 , 余0 对应 25
sb.append(arr[num]);
columnNumber = (columnNumber - 1) / 26; // 26 对应 25。再除以 26
}
return sb.reverse().toString();
67.二进制求和👊
给你两个二进制数字得字符串, 计算相加后的二级制字符串
思路: 模拟。 模拟进位即。
238.除自身以外数组的乘积👐
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
思路: 类似前缀和思想,answer[i] = 左边的积 * 右边的积
int[] ret = new