日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gray Code LeetCode 89

發布時間:2024/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gray Code LeetCode 89 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0 01 - 1 11 - 3 10 - 2
這道題其實就是產生格雷碼(簡直廢話~),格雷碼是有一定規律的,數電課上學過一點格雷碼的規律,但是對于編程解決問題沒啥用啊- -,我們還是來找規律吧。4位的,我手寫最多寫4位
0000
0001
0011
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
按列來看,從左往右數第0列(從0列開始),前半部分為0,后半部分為1。第1列,等分成上下兩部分,第一部分的前半部分為0,后半部分為1。第二部分的前半部分為1,后半部分為0。
后面繼續看,可以看出規律了。把第i列分成2^i部分,奇數部分的前半部分為0,后半部分為1,偶數部分的前半部分為1,后半部分為0。或者用另外一種表述方法,我們可以把本次的劃分看作前一次的劃分的
一個部分,如果是上次劃分的前半部分,則符合前面的奇數部分。后半部分則符合前面的后半部分。代碼如下: 1 /* 2 使用分治法,如果本次屬于前一次二分的前半部分,則本次的前半部分第n位填0,后半部分第n位填1 3 如果本次屬于前一次二分的后半部分,則本次的前半部分第n位填1,后半部分第n位填0 4 第一次填寫,設為前半部分。代碼中left代表前半部分-_-。 5 */ 6 7 void setGray(int *num, int start, int end, bool left, int n) 8 { 9 int lbit, rbit, i = 0; 10 int mid = (start + end) >> 1; 11 12 if (left) 13 { 14 lbit = 0; 15 rbit = 1 << n; 16 } 17 else 18 { 19 lbit = 1 << n; 20 rbit = 0; 21 } 22 23 for (i = start; i <= mid; ++i) 24 num[i] = num[i] | lbit; 25 26 for (i = mid + 1; i <= end; ++i) 27 num[i] = num[i] | rbit; 28 29 if (n > 0) 30 { 31 setGray(num, start, mid, true, n - 1); 32 setGray(num, mid + 1, end, false, n - 1); 33 } 34 } 35 36 37 int *grayCode(int n, int *returnSize) 38 { 39 *returnSize = 1 << n; 40 int *ans = (int *)malloc(*returnSize * sizeof(int)); 41 int i = 0; 42 for (i = 0; i < *returnSize; ++i) 43 { 44 ans[i] = 0; 45 } 46 if (n > 0) setGray(ans, 0, *returnSize - 1, true, n - 1); 47 return ans; 48 }

?

轉載于:https://www.cnblogs.com/DennisXie/p/4792928.html

總結

以上是生活随笔為你收集整理的Gray Code LeetCode 89的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。