算法通关村第13关【青铜】| 数字与数学基础问题

数字统计专题

1.数组元素积的符号

思路:每回碰到负数就取反

java 复制代码
class Solution {
    public int arraySign(int[] nums) {
        int res = nums[0];
        if(nums[0]>0){
            res = 1;
        }else if(nums[0]<0){
            res = -1;
        }else{
            return res;
        }
        for(int i = 1;i<nums.length;i++){
            if(nums[i]<0){
                res = -res;
            }else if(nums[i] == 0){
                return 0;
            }
        }
        return res;
    }
}

2.阶乘尾数

思路:15!= 1*2*3*4*5*6*7*8*9*(2*5)11*12*13*14*15

可以发现2的因子是肯定会比5的因子多,而只要拆分中出现2*5=10结果就会多一个0,所以问题就转换为求出有多少个为5的因子

java 复制代码
class Solution {
    public int trailingZeroes(int n) {
        int count = 0;
        int num = 5;
        while(n>=num){
            count += n/num;
            n = n/5;
        }
        return count;
    }
}

溢出问题

1.整数反转

思路:反转方法有使用栈、字符串转整数、取模,这里使用取模更好

判断溢出的方法:max/10>num

java 复制代码
class Solution {
    public int reverse(int x) {
        int res = 0;
        int max = Integer.MAX_VALUE;
        while(x != 0){
            int t = x%10;
            System.out.print(t);
            if(res>max/10||res == max/10 && t >7){
                return 0;
            }
            if(res<-max/10||res == max/10 && t <=-8){
                return 0;
            }
            res = res*10 + t;
            x=x/10;
        }
        return res;
    }
}

2.回文数

思路:判断回文方法双指针、截取一半比较

java 复制代码
class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0){
            return false;
        }
        if(x %10 == 0 && x != 0){
            return false;
        }
        int book = 0;
        while(x>book){
            book = book*10+x%10;
            x /= 10;
        }
        return x==book || x == (book/10);
    }
}

进制问题

1.七进制数

思路:

  1. 二进制到十进制

    • 二进制数每一位的权值为2的幂,从右往左依次是1、2、4、8、16...
    • 将二进制数的每一位与对应权值相乘,然后求和即可得到十进制数。

    例如,二进制数1011转换为十进制:(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11。

  2. 八进制到十进制

    • 八进制数每一位的权值为8的幂,从右往左依次是1、8、64、512...
    • 将八进制数的每一位与对应权值相乘,然后求和即可得到十进制数。
  3. 十六进制到十进制

    • 十六进制数每一位的权值为16的幂,从右往左依次是1、16、256、4096...
    • 将十六进制数的每一位与对应权值相乘,然后求和即可得到十进制数。需要注意的是,十六进制中的A表示10,B表示11,C表示12,D表示13,E表示14,F表示15。
  4. 十进制到其他进制

    • 将十进制数不断除以目标进制的基数,取余数作为新进制数的一位,直到商为0。
    • 反转余数的顺序,即可得到目标进制数。

    例如,将十进制数231转换为二进制:

    • 231 / 2 = 115 余 1
    • 115 / 2 = 57 余 1
    • 57 / 2 = 28 余 1
    • 28 / 2 = 14 余 0
    • 14 / 2 = 7 余 0
    • 7 / 2 = 3 余 1
    • 3 / 2 = 1 余 1
    • 1 / 2 = 0 余 1

    反转余数的顺序为 11100111,即231的二进制表示。

  5. 其他进制到其他进制

    • 可以通过先将原数转换为十进制,然后再从十进制转换为目标进制来实现。
java 复制代码
class Solution {
    public String convertToBase7(int num) {
        StringBuilder sb = new StringBuilder();
        int sign = num<0 ? 1 : 0;
        if(num < 0){
            num = -num;
        }
        do{
            sb.append(num%7);
            num = num /7;
        }while(num>0);
        if(sign == 1){
            sb.append("-");
        }
        return sb.reverse().toString();
    }
}

2.转换为N机制

java 复制代码
public static String convert(int M, int N) {
        Boolean flag = false;
        if (M < 0) {
            flag = true;
            M *= -1;
        }
        StringBuffer sb = new StringBuffer();
        int temp;
        while (M != 0) {
            temp = M % N;
            //技巧一:通过数组F[]解决了大量繁琐的不同进制之间映射的问题
            sb.append(F[temp]);
            M = M / N;
        }
        //技巧二:使用StringBuffer的reverse()方法,让原本麻烦的转置瞬间美好
        sb.reverse();
        //技巧三:最后处理正负,不要从一开始就揉在一起。
        return (flag ? "-" : "") + sb.toString();
    }
相关推荐
88号技师16 分钟前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
勤奋的知更鸟23 分钟前
Java 编程之模板方法模式
java·开发语言·模板方法模式
逸风尊者44 分钟前
开发易掌握的知识:GeoHash查找附近空闲车辆
java·后端
ゞ 正在缓冲99%…44 分钟前
leetcode918.环形子数组的最大和
数据结构·算法·leetcode·动态规划
碎叶城李白1 小时前
若依学习笔记1-validated
java·笔记·学习·validated
Kaltistss2 小时前
98.验证二叉搜索树
算法·leetcode·职场和发展
都叫我大帅哥2 小时前
🌊 Redis Stream深度探险:从秒杀系统到面试通关
java·redis
都叫我大帅哥2 小时前
Redis持久化全解析:从健忘症患者到记忆大师的逆袭
java·redis
知己如祭2 小时前
图论基础(DFS、BFS、拓扑排序)
算法
mit6.8242 小时前
[Cyclone] 哈希算法 | SIMD优化哈希计算 | 大数运算 (Int类)
算法·哈希算法