亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

Leetcode-476. Number Complement C++解

2019-11-08 01:58:20
字體:
來源:轉載
供稿:網友

我的解法:

1.題意要素:

(1)正整數

(2)前驅的0不計入置反的操作,比如5的二進制值位00000101,那么其會被置反的只有‘101’這部分,前面的0都不算。

2.關鍵技巧:

和‘1’相與結合右移可以達到判斷某一位是否為0的目的,能夠知道哪個位是哪個值就能累加到最終結果。

3.具體解法:

聲明一個變量n記錄當前操作的位,作為累加的冪。將其逐位右移直到變為0,右移時還要n+1記錄當前操作的位數。每次右移前與1相與,如果結果是0,則代表該位源值為0,最終結果就需要累加2^n。

#include <iostream>#include <cmath>using namespace std;int findComplement(int num);int main(){	int num;	cin >> num;	cout << findComplement(num) << endl;	return 0;}int findComplement(int num) {	int cp = 0;	int power = 0;	if(!num){		return 1;	}	while(num != 0){		if((num & 1) == 0){			cp += pow(2, power);		}		power++;		num = num >> 1;	}    return cp;}

網上的另一種解法,覺得挺巧妙的,然而并沒有變快,也是3ms,出處:https://discuss.leetcode.com/topic/74897/maybe-fewest-Operations/2

int findComplement(int num) {    int mask = num;    mask |= mask >> 1;    mask |= mask >> 2;    mask |= mask >> 4;    mask |= mask >> 8;    mask |= mask >> 16;    return num ^ mask;}大致思路就是:

        首先分析題意??蓪㈩}意總結為將給定數字和一個特定的掩碼進行XOR操作(異或操作)。這個掩碼和給定數有同樣的位數,且在其最高位右邊全部都是1。以5為例,其二進制表示為101,那5就有3位,那么5(101)對應的掩碼為111,5和掩碼111異或操作后就可以得到101,也就是題意要求的結果。另一個掩碼的例子是38(100110)的掩碼是111111。

     這樣一來,問題就濃縮成了“如何獲取這個掩碼”。我們知道,不管是啥正整數,其最高位必定是1,我們可以將其最高位不斷右移,來填滿余下的低位,得到一個從最高位開始向右都為1的掩碼。先看下一個8位的數字,后面可以延伸到32位。以64(01000000)為例,我們的目的是將第6-1位置為1。一開始第7位是1,mask |= mask>>1 將第6位也置為1,這樣就得到了01100000。接下來是mask |= mask>>2 ,將5和4位置為1,得到011110000。這里移動2位,因為經過第一步我們已經將mask的高兩位置為1了,所以可以移動兩位來節省操作,當然你也可以逐位移動。 接下來以為高4位被置為1了,可以移動4位,得到01111111這樣就全部置為1了,當然你也可以移動1,2,4位,隨你喜歡。

      32位如何移,可以看源碼自行理解。

原文如下:

@NoAnyLove To understand the solution, we need to go backwards. The aim is to xor the given number with a mask. The mask should contain all 1s in its rightmost bits. However, the number of rightmost bits is important. In the case of 5(101), for example, the number of rightmost bits must be 3, since 5 uses 3 rightmost bits. The mask must be 111 for 5(101). When we xor 111 with 101, we will get 010. As another example, the mask will be 111111 for 38(100110)So the PRoblem boils down to generating the mask. Let's think about 8-bit numbers. We can later extend the same logic to 32-bit integers. I will count the bits from right to left, starting with 1.The largest positive numbers represented by 8 bits will set 7th bit. 64(01000000) is the largest positive number represented by 8 bits, which has the most number of 0s. It is important for our explanation since we must turn all those 0s into 1s.The first operation, mask |= mask>>1; will set the 6th bit. So, mask will become (01100000). Now, we know that the 7th and 6th bits are set, we can safely shift the mask to right by not 1 but 2 bits. mask |= mask>>2; will now set the 5th and 4th bits. By the same reason, we can now shift the mask to right by not 1, 2 or 3 but 4 bits. That is the threshold for 8-bit numbers. We do not need to shift more.For 32-bit integers, the shift operations should continue until reaching to 16. For 64-bit longs, that will be 32.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕免费视频| www.美女亚洲精品| 亚洲精品网址在线观看| 欧美寡妇偷汉性猛交| 欧美俄罗斯乱妇| 久久久久久久亚洲精品| 91久久精品国产| 国产精品亚洲一区二区三区| 国内外成人免费激情在线视频网站| 亚洲r级在线观看| 国产69精品久久久久99| 久久久久国色av免费观看性色| 亚洲精品在线不卡| 91亚洲国产精品| 久久亚洲精品小早川怜子66| 在线观看视频亚洲| 国产欧美在线观看| 亚洲精品久久久久中文字幕欢迎你| 国产精品福利在线| 亚洲国产又黄又爽女人高潮的| 精品亚洲一区二区三区| 久久香蕉国产线看观看网| 久久人人爽人人爽人人片av高请| 日韩国产欧美区| 亚洲免费视频网站| 国产999在线观看| 国产福利成人在线| 国产精品高潮呻吟视频| 久久精品国产99国产精品澳门| 欧美国产在线电影| 69av视频在线播放| 久久99久国产精品黄毛片入口| 日韩免费观看高清| 欧美日韩成人在线视频| 77777少妇光屁股久久一区| 欧美最猛性xxxxx亚洲精品| 在线电影欧美日韩一区二区私密| 亚洲人高潮女人毛茸茸| 国产亚洲精品美女久久久| 国产激情视频一区| 亚洲男人av电影| 亚洲男人天堂古典| 中文字幕日韩在线视频| 欧美性生交xxxxx久久久| 亚洲国产精品系列| 亚洲国产成人精品电影| 国产精品海角社区在线观看| 久久国产精品久久久| 国产精品黄色av| 成人有码在线视频| 色婷婷久久av| 久久91精品国产| 亚洲欧美日本伦理| 一区二区三区精品99久久| 亚洲春色另类小说| 亚洲第一福利网| 国产精品一区二区久久久| 91九色国产视频| 国产精品jizz在线观看麻豆| 97视频在线观看免费高清完整版在线观看| 日韩精品视频观看| 亚洲成人精品久久| 日韩中文字幕网站| 国产精品久久久久久久久免费| 欧美精品videosex性欧美| 亚洲最大的免费| 久久精品国产69国产精品亚洲| 亚洲天堂开心观看| 68精品国产免费久久久久久婷婷| 欧美激情一区二区三区在线视频观看| 国产成人在线播放| 国产精品女主播| 色狠狠久久aa北条麻妃| 日韩福利在线播放| 亚洲自拍中文字幕| 欧美另类极品videosbestfree| 欧美尤物巨大精品爽| 欧美成人免费播放| 亚洲二区中文字幕| 日韩欧美在线中文字幕| 精品国产乱码久久久久久婷婷| 国产精品美腿一区在线看| 亚洲全黄一级网站| 久久99久久99精品中文字幕| 91精品国产一区| 国产精品一区二区久久久| 国产美女主播一区| 国产精品狠色婷| 亚洲影院高清在线| 欧美在线视频播放| 国产成人涩涩涩视频在线观看| 日韩欧美中文字幕在线播放| 国产男人精品视频| 欧美日韩黄色大片| 国产视频欧美视频| 日韩av电影手机在线观看| 久久精品视频网站| 亚洲精品美女免费| 91精品视频大全| 丝袜亚洲另类欧美重口| 国产精品最新在线观看| 日本一区二区三区四区视频| 黄色成人av网| 亚洲成人网久久久| 午夜精品一区二区三区在线播放| 久久艳片www.17c.com| 91精品国产高清自在线看超| 亚洲无亚洲人成网站77777| 欧美制服第一页| 久久综合久久八八| 欧洲美女免费图片一区| 日韩av免费看| 日韩成人激情影院| 亚洲人成在线播放| 国产精品一久久香蕉国产线看观看| 国产精品自产拍高潮在线观看| 欧美激情国产精品| 日本伊人精品一区二区三区介绍| 亚洲男人av在线| 国产在线精品成人一区二区三区| 亚洲成人xxx| 91视频国产精品| 国内免费久久久久久久久久久| 亚洲性生活视频| 亚洲人成亚洲人成在线观看| 亚洲第一国产精品| 国产精品自产拍在线观看| 最近2019年好看中文字幕视频| 国产精品免费视频久久久| 亚洲高清一二三区| 精品国产成人在线| 成人黄在线观看| 97热精品视频官网| 深夜福利91大全| 国产香蕉97碰碰久久人人| 在线色欧美三级视频| 亚洲免费电影在线观看| 亚洲午夜小视频| 国产在线高清精品| 亚洲片av在线| 日韩精品久久久久| 91精品视频网站| 久久久国产精品免费| 91精品久久久久久久久久另类| 欧美大片在线看| 91大神福利视频在线| 日韩欧美黄色动漫| 国产91亚洲精品| 日韩小视频在线| 国产成人福利视频| 亚洲成人a**站| 91免费看国产| 日韩av电影免费观看高清| 久久久中文字幕| xxav国产精品美女主播| 久久99热精品这里久久精品| 日韩激情av在线免费观看| 555www成人网| 日韩免费观看在线观看| 国产精品精品视频一区二区三区| 日韩av一区在线观看| 亚洲wwwav| 欧美日韩国产在线看| 国产精品嫩草影院一区二区|