力扣笔记之数与位常见题型

记录刷力扣时数与位的小技巧
【190】颠倒给定的 32 位无符号整数的二进制位。

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int res=n&1;
        int i=1;
        while(i<32){
            n=n>>>1;
            res=res<<1;
            res+=n&1;
            i++;
        }
        return res;
    }
}

【405】给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

题解:整型一共32位二进制,每4个二进制位是一位8进制,一共可以转为8位8进制,有符号右移通过sb.length() < 8判断有没有全部转化完;无符号右移最高位补0,全部转化完后num == 0,所以通过判断最终是否为0,判断有没有转化完。

class Solution {
    public String toHex(int num) {
        	if (num == 0)
			return "0";
		char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
		StringBuilder sb = new StringBuilder();
		while (sb.length() < 8 && num != 0) {
			sb.append(chars[num & 0xf]);
			num >>= 4;
		}
		return sb.reverse().toString();
    }
}

找到数组每个元素的右边最大的数

for(int j = chars.length-1;j>=0;j--){
            if(chars[j]-'0'>chars[max]-'0') max = j;
            maxIndex[j]=max;
        }

给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

public int reverse (int x) {
        // write code here
        int res = 0 ;
        while(x != 0){
            int temp = res*10 + x %10 ;
            // 如果不相等,说明超过Integer.MAX_VALUE
            if((temp-x%10)/10 != res) return 0 ;
            res = temp ;
            x /= 10 ;
        }
        return res ;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值