1.数字统计专题
1.1 符号统计
原题:力扣1822.
只需要看有多少个负数,就足以判断符号了。
public int arraySign(int[] nums) {
int prod = 1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
return 0;
} else if (nums[i] < 0) {
prod = -prod;
}
}
return prod;
}
1.2 阶乘0的个数
原题:力扣 面试题 16.05.
public int trailingZeroes(int n) {
int cnt = 0;
for (long num = 5; n / num > 0; num *= 5) {
cnt += n / num;
}
return cnt;
}
2.溢出问题
2.1 整数反转
public int reverse(int x) {
int res = 0;
while (x != 0) {
if (res < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
2.2 字符串转整数
见第十二关青铜挑战:字符串转换整数
2.3 回文数
这道题将一半的字符进行反转然后比较,可以避免溢出的问题。
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x == revertedNumber / 10;
}
3.进制问题
3.1 七进制数
原题:力扣504.
public String convertToBase7(int num) {
StringBuilder sb = new StringBuilder();
boolean sign = num < 0;
if (sign) {
num *= -1;
}
do {
sb.append(num % 7 + "");
num /= 7;
} while (num > 0);
if (sign) {
sb.append("-");
}
return sb.reverse().toString();
}
3.2 进制转换
给定一个十进制数M,以及需要转换的进制数N,将十进制数M转化为N进制数。M是32位整数,2<=N<=16。
三大措施:
- 定义大小为 16 的数组 F ,保存的是 2 到 16 的各个进制的值对应的标记,赋值时只计算下标。
- 使用 StringBuilder 完成数组转置功能。
- 通过一个 flag 来判断正负性,最后处理。
public static final String[] F = {"0", "1", "2","3", "4", "5", "6", "7", "8","9", "A", "B", "C", "D", "E", "F"};
public String convert(int M, int N) {
Boolean flag = false;
if (M < 0) {
flag = true;
M *= -1;
}
StringBuilder sb = new StringBuilder();
int temp;
while (M != 0) {
temp = M % N;
sb.append(F[temp]);
M = M / N;
}
sb.reverse();
return (flag ? "-" : "") + sb.toString();
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤
本文介绍了Java编程中涉及的数字统计(符号计数、阶乘零的个数)、溢出问题(整数反转、字符串转整数、回文数检测)、以及进制转换(七进制和任意进制)的相关解决方案和代码示例。

1316

被折叠的 条评论
为什么被折叠?



