From 7cd57aa4b13b37604014233d9668f1f876a697e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Tue, 23 Oct 2018 00:00:03 +0800 Subject: [PATCH] Create 190. Reverse Bits.md --- 190. Reverse Bits.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 190. Reverse Bits.md diff --git a/190. Reverse Bits.md b/190. Reverse Bits.md new file mode 100644 index 0000000..c785bd3 --- /dev/null +++ b/190. Reverse Bits.md @@ -0,0 +1,21 @@ +# [190. Reverse Bits](https://leetcode.com/problems/reverse-bits/description/) +# 思路 +将给定的数的二进制进行翻转。 +定义res为32位无符号型且初始值为0,可从低位到高位依次取得给定的数的32位bit值,再用或运算赋值给res的最低位,res不断左移。 +可将给定的数与一个mask进行与操作取得特定位数上的值,mask只有一位是1。可通过对mask移位(如下代码)或者对给定的数移位来达到取特定位的目的。 +# C++ +``` +class Solution { +public: + uint32_t reverseBits(uint32_t n) { + uint32_t res = 0; + uint32_t mask = 1; + for (uint32_t i = 0; i < 32; ++i) { + // n & mask取得第i位 + res = (res << 1) | ((n & mask) >> i); + mask = mask << 1; + } + return res; + } +}; +```