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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列

發(fā)布時(shí)間:2024/5/28 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄:
1.Number of 1 Bits? - 計(jì)算二進(jìn)制1的個(gè)數(shù)?[與運(yùn)算]
2.Contains Duplicate - 是否存在重復(fù)數(shù)字 [遍歷]
3.Reverse Integer - 翻轉(zhuǎn)整數(shù) [int邊界問(wèn)題]
4.Excel Sheet Column Number - Excel字符串轉(zhuǎn)整數(shù) [簡(jiǎn)單]
5.Power of Two & Happy Number - 計(jì)算各個(gè)位數(shù)字 [%10 /10]


一.Number of 1 Bits?

題目概述:
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the? Hamming weight ).
For example, the 32-bit integer ’11' has binary representation?

00000000000000000000000000001011
so the function should return 3.

解題方法:

三種方法包括:
? ? ? ? 1.依次和0x1進(jìn)行&與運(yùn)算,若結(jié)果為1則加1,表示1個(gè)數(shù),再右移;
? ? ? ? 2.推薦的方法,n&(n-1),直到為0,次數(shù)為1的個(gè)數(shù);
? ? ? ? 3.n取2模,依次判斷個(gè)位是否為1,在n/2移位,常規(guī)方法。
其中uint32_t為32位無(wú)符號(hào)類型數(shù)據(jù),參考地址
Power of Two題目也可以通過(guò)return (n > 0) && (!(n & (n - 1)))一句話實(shí)現(xiàn)。
Reverse Bits題目也可以<<移位實(shí)現(xiàn)。

我的代碼:

/** uint32_t為32位無(wú)符號(hào)類型數(shù)據(jù) 思路:數(shù)字移位*/ int hammingWeight(uint32_t n) {//第一種方法 考查移位及與運(yùn)算&int result=0, left=0;while(0 != n){left = n & 0x1;result += left;n = n >> 1;}return result;//第二種方法 int re = 0;while(0 != n){n = n&(n - 1);++re;}return re;//第三種方法 求2模int count = 0; while (n) { if (n % 2 == 1) { ++count; } n /= 2; } return count; }

二.Contains Duplicate

題目概述:
Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.


題目解析:
題目是給定一個(gè)整數(shù)數(shù)組,判斷該數(shù)組中是否存在重復(fù)的數(shù)字。簡(jiǎn)單AC的方法比較簡(jiǎn)單,兩層循環(huán)判斷;但是如果要求是O(n)的時(shí)間和O(1)的空間,怎樣實(shí)現(xiàn)呢?騰訊的筆試題就考到了。又見(jiàn)重復(fù)判斷II III題。


我的代碼:

bool containsDuplicate(int* nums, int numsSize) {//最傻的方法循環(huán)判斷int i,j;if(numsSize==0)return false;for(i=0;i<numsSize;i++){for(j=i+1;j<numsSize;j++){if(nums[i]==nums[j]){return true; //表示存在重復(fù)的}}}return false; }

推薦代碼:



三.Reverse Integer

題目概述:
Reverse digits of an integer.
Example1:?x = 123, return 321
Example2:?x = -123, return -321


解題思路:
該題主要是考察整數(shù)的翻轉(zhuǎn)問(wèn)題,最簡(jiǎn)單的方法就是:通過(guò)"%10"計(jì)算個(gè)位數(shù)字和"/10"循環(huán)進(jìn)行,直到整數(shù)為結(jié)果0;但是你需要注意的是:
? ? ? ? 1.負(fù)數(shù)的轉(zhuǎn)換x=x*(-1)
? ? ? ? 2.整數(shù)越界,int型范圍是(-2147483648~2147483647),4字節(jié)。當(dāng)x=1534236469時(shí),應(yīng)該輸出0而不是9646324351或溢出后的數(shù)
? ? ? ? 3.需要注意一個(gè)特殊的用例:x=-2147483648。此時(shí)x=x*(-1)=2147483648溢出,結(jié)果應(yīng)是0。
故此處需要把整數(shù)范圍的判斷指定出來(lái)講解,沒(méi)考慮整數(shù)溢出的代碼如下:

//翻轉(zhuǎn)數(shù)字 顯然采用前面做過(guò)的%10提取個(gè)位和/10方法 int reverse(int x) {int i,j;int num; //存儲(chǔ)位數(shù)int result; //結(jié)果bool flag; //是否是負(fù)數(shù) true負(fù)數(shù)if( (x>=0&&x<10)||(x<0&&x>-10)) return x;if(x>0) flag=true;else {flag=false;x=x*(-1);}result=0;while(x!=0) {result=result*10+x%10; //結(jié)果x=x/10;}if(flag==true)return result;elsereturn result*(-1); }
正確代碼:

重點(diǎn)是類似于Java的Integer.MAX_VALUE 這種直接可用的數(shù)值型的最大值定義,C語(yǔ)言采用#include?<limits.h>里面的INT_MIN和INT_MAX,而不是寫(xiě)一長(zhǎng)串?dāng)?shù)字。
/*** 翻轉(zhuǎn)數(shù)字 剛做完翻轉(zhuǎn)二叉樹(shù)做該題還是感覺(jué)數(shù)字親切點(diǎn)* 顯然采用前面做過(guò)的%10提取個(gè)位和/10方法* 方法很簡(jiǎn)單 但是需要注意越界和x==-2147483648變成正數(shù)時(shí)溢出*/ int reverse(int x) {int i,j;int num; //存儲(chǔ)位數(shù)int result; //結(jié)果bool flag; //是否是負(fù)數(shù) true負(fù)數(shù)if( (x>=0&&x<10)||(x<0&&x>-10)) return x;if(x==INT_MIN) //否則扭轉(zhuǎn)溢出 INT_MIN=-2147483648return 0;if(x>0) { flag=true;}else {flag=false;x=x*(-1);}result=0;while(x!=0) {if(x!=0&&result>INT_MAX/10) { //214748364return 0;}result=result*10+x%10; //結(jié)果x=x/10;//printf("%d\n",result);}if(flag==true)return result;elsereturn result*(-1); }

四.Excel Sheet Column Number

題目概述:
Related to question?Excel Sheet Column Title
Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:

A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28


題目解析:
該類題目比較簡(jiǎn)單,主要考察字符串遍歷和整數(shù)進(jìn)制問(wèn)題(26進(jìn)制),自己一次AC。

int titleToNumber(char* s) {int result; int length;int i,j;if(s==NULL) return 0;length=strlen(s);result=0;//從右向左遍歷 個(gè)位右for(i=0; i<length; i++) {result=result*26+(s[i]-'A')+1;}return result; }

五.Power of Two & Happy Number

題目概述:
判斷數(shù)字是否是2的次數(shù)數(shù)
判斷數(shù)字是否是happy數(shù),結(jié)果為1則返回true
Example: 19 is a happy number
? ? ? ? 1^2 + 9^2 = 82
? ? ? ? 8^2 + 2^2 = 68
? ? ? ? 6^2 + 8^2 = 100
? ? ? ? 1^2 + 0^2 + 0^2 = 1

主要考察計(jì)算數(shù)字每個(gè)位數(shù)的方法,即n%10和n=n/10的方法。

我的代碼:
Power of Two
強(qiáng)推位操作判斷16=10000即高位為1其他為0,或通過(guò)一句話即可:?
return (n >0) && (!(n & (n -1)))
http://www.bubuko.com/infodetail-953320.html

bool isPowerOfTwo(int n) {int number;if(n<=0) return false;if(n==1) return true; //1=2^0if(n%2!=0) return false;while(n>0) {if(n==1) { //最后一個(gè)數(shù)字是1return true;}if(n%2!=0) {return false;}else {n=n/2;}} } Happy Number
bool isHappy(int n) { //重點(diǎn):可能出現(xiàn)無(wú)限循環(huán)或數(shù)組越界情況 哪種情況不是happy數(shù)int result; //結(jié)果直至0int number;if(n<=0) return false;while(result!=1) {//計(jì)算resultresult = 0;while(n>0) {number = n%10;n = n/10;result = result + number*number;}if(result==1) {return true;}else if(result<10) { //輸入2返回falsereturn false;}else {n = result; //下一計(jì)算n為上次的結(jié)果}} }


PS:最后希望文章對(duì)您有所幫助,這都是自己A題的一些筆記和心得,同時(shí)真心建議你自己動(dòng)手做做LeetCode。以前我也不信邪,現(xiàn)在信了~
(By:Eastmount 2015-9-14 凌晨5點(diǎn)半? ?http://blog.csdn.net/eastmount/)

總結(jié)

以上是生活随笔為你收集整理的[LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。