解题思路:该题与上题类似,如果是负数首先转化成正数(+ 2147483647+1),再处理,然后变成2进制数(如果是负数最高位是1),翻转2进制数,变成十进制数,翻转后如果最后位是1,在十进制数基础上加上2147483647+1。
Java代码实现:
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
String str="";
if(n==0) return 0;
if(n==-2147483648) return 1;
System.out.println(n);
int m=n;
if(n<0) {
n+=2147483647+1;
//str+="1";
}System.out.println(n);
while(n!=0){
int mod=n%2;
if(mod==1) str="1"+str;
else str="0"+str;
n=n/2;
}
String revString="";
for(int j=str.length();j<32;j++){
str="0"+str;
}
if(m<0) str="1"+str.substring(1,str.length());
for(int i=0;i<str.length();i++){
revString=str.charAt(i)+revString;
}
int num=0;
for(int i=revString.length()-1;i>0;i--){
num+=(Integer.valueOf(revString.charAt(i))-48)*(int)Math.pow(2,revString.length()-1-i);
}
if(revString.charAt(0)=='1') {
return 2147483647+1+num;
}
return num;
}
}
原题题目:https://leetcode.com/problems/reverse-bits/
版权声明:本文为博主原创文章,未经博主允许不得转载。