算法:小技巧篇(待完善)

一、判断反转后或字符串加减法后的数字是否超过32有符号整数的范围

if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
    // 业务逻辑
}

1.1 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [ 图片说明 , 图片说明 ] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

输入:x = 123
输出:321

class Solution {
    public int reverse(int x) {
        int res = 0;
        System.out.println(Integer.MAX_VALUE);
        while(x != 0){
            res = res * 10 + x%10;
            if(res > Integer.MAX_VALUE/10 || res < Integer.MIN_VALUE/10) // 重点
                return 0;
            x = x/10;
        }
        return res;
    }
}

二.进制转换

2.1 十进制转二进制

十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

图片说明

2.2 26进制转换

2.2.1 Excel表列名称

图片说明
图片说明
思路:
对于一般性的进制转换题目,只需要不断地对需要转换的数进行 % 运算取得最后一位,然后对该数进行 / 运算,将已经取得的位数去掉,直到 需要转换的数为 00 即可。

一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在 [0,x)」的前提下进行「逢 x 进一」。

但本题需要我们将从 1 开始,因此在执行「进制转换」操作前,我们需要先对 columnNumber 执行减一操作,从而实现整体偏移。

class Solution {
    public String convertToTitle(int cn) {
        StringBuilder sb = new StringBuilder();
        while (cn > 0) {
            cn--;
            sb.append((char)(cn % 26 + 'A'));
            cn /= 26;
        }
        sb.reverse();
        return sb.toString();
    }
}

三、荷兰国旗问题

3.1 颜色分类

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

class Solution {
    // 荷兰国旗问题
    public void sortColors(int[] nums) {
        int k=0, j=nums.length-1;
        int n = nums.length;
        for(int i=0; i<=j; i++){
            while(i<j && nums[i] == 2){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
                j--;
            }
            if(nums[i] == 0){
                int tmp = nums[i];
                nums[i] = nums[k];
                nums[k] = tmp;
                k++;
            }
        }
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-23 19:42
可乐不加冰777:匿名了,还写联系方式
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务