Reverse bits of a given 32 bits unsigned integer.
For example, given input 43261596 (rePResented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).
Follow up: If this function is called many times, how would you optimize it?
s思路: 1. 一种方法是右移得到数位,然后左移构造新数。麻烦的地方在于是unsigned integer,貌似不影响。 2. 另一种方法是两头取bit位,swap。这样就和unsigned integer无关! 3. 如果调用多次,如何优化?
//方法1:移位。class Solution {public: uint32_t reverseBits(uint32_t n) { // uint32_t res=0; for(int i=0;i<32;i++){ res<<=1; if(n){ res=res|n&1; n>>=1; } } return res; }};//方法2:swap首尾class Solution {public: uint32_t reverseBits(uint32_t n) { // int i=0,j=31; while(i<j){ int l=n&(1<<i); int r=n&(1<<j); if(l&&!r||!l&&r){ n=n^(1<<j); n=n^(1<<i); } i++;j--; } return n; }};新闻热点
疑难解答