Leetcode每日一題 190 顛倒二進位制位

2022-09-14 18:03:18 字數 1591 閱讀 6383

顛倒給定的 32 位無符號整數的二進位制位。

請注意,在某些語言(如 j**a)中,沒有無符號整數型別。在這種情況下,輸入和輸出都將被指定為有符號整數型別,並且不應影響您的實現,因為無論整數是有符號的還是無符號的,其內部的二進位制表示形式都是相同的。

在 j**a 中,編譯器使用二進位制補碼記法來表示有符號整數。因此,在上面的 示例 2 中,輸入表示有符號整數 -3,輸出表示有符號整數 -1073741825。

高階:如果多次呼叫這個函式,你將如何優化你的演算法?

示例一:

輸入: 00000010100101000001111010011100

輸出: 00111001011110000010100101000000

解釋: 輸入的二進位制串 00000010100101000001111010011100 表示無符號整數 43261596,

因此返回 964176192,其二進位制表示形式為 00111001011110000010100101000000。

示例二:

輸入:11111111111111111111111111111101

輸出:10111111111111111111111111111111

解釋:輸入的二進位制串 11111111111111111111111111111101 表示無符號整數 4294967293,

因此返回 3221225471 其二進位制表示形式為 10111111111111111111111111111111 。

示例一:

輸入:n = 00000010100101000001111010011100

輸出:964176192 (00111001011110000010100101000000)

解釋:輸入的二進位制串 00000010100101000001111010011100 表示無符號整數 43261596,

因此返回 964176192,其二進位制表示形式為 00111001011110000010100101000000。

示例二:

輸入:n = 11111111111111111111111111111101

輸出:3221225471 (10111111111111111111111111111111)

解釋:輸入的二進位制串 11111111111111111111111111111101 表示無符號整數 4294967293,

因此返回 3221225471 其二進位制表示形式為 10111111111111111111111111111111 。

輸入是乙個長度為 32 的二進位制字串

邊取餘邊累加即可

class solution 

return sum;

}};

sum = sum * 2 + n % 2;

n >>= 1; //等價於 n = n / 2;

這行如果看不懂可以看作十進位制倒轉的過程

sum = sum * 10 + n % 10;

n = n / 10;

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...

LeetCode每日一題(題139)

題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...