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();
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤