记录刷力扣时数与位的小技巧
【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 ;
}