LeetCode C++ 劍指 Offer 64. 求1+2+…+n【Bit Manipulation】中等
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
示例 1:
輸入: n = 3
輸出: 6
示例 2:
輸入: n = 9
輸出: 45
限制: 1 <= n <= 10000
解法1 直接乘除
class Solution {
public:
int sumNums(int n) {
return n * (n + 1) / 2;
}
};
執行效率如下:
執行用時:4 ms, 在所有 C++ 提交中擊敗了30.48% 的使用者
記憶體消耗:6.2 MB, 在所有 C++ 提交中擊敗了37.91% 的使用者
解法2 快速乘和右移
class Solution {
public:
int sumNums(int n) { //乘法改為快速乘函式,除法換為>>1
int a = n, b = n + 1, ans = 0;
while (b) {
if (b & 1) ans += a;
a <<= 1;
b >>= 1;
}
return ans >> 1;
}
};
執行效率如下:
執行用時:4 ms, 在所有 C++ 提交中擊敗了30.48% 的使用者
記憶體消耗:6.3 MB, 在所有 C++ 提交中擊敗了28.12% 的使用者
相關文章
- Leetcode劍指offer(八)LeetCode
- 劍指 Offer 列印從1到最大n位數c++C++
- LeetCode C++ 50. Pow(x, n)【Recursion】中等LeetCodeC++
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer計劃9(動態規劃中等版)---java動態規劃Java
- LeetCode 劍指 Offer 05. 替換空格LeetCode
- LeetCode-劍指Offer刷題記錄LeetCode
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指offer計劃5(查詢演算法中等版)---java演算法Java
- 劍指OFFER
- 劍指offer——正規表示式匹配C++C++
- 劍指offer計劃20( 搜尋與回溯演算法中等)---java演算法Java
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer——二叉樹的深度C++二叉樹C++
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- leetcode *劍指 Offer 47. 禮物的最大價值LeetCode
- LeetCode 劍指 Offer 65. 不用加減乘除做加法LeetCode
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 劍指offer導航
- 劍指offer16
- 劍指 offer20
- 劍指 offer21
- 【劍指 Offer 】17. 列印從1到最大的n位數
- 劍指offer | 17. 列印從1到最大的n位數
- 劍指 Offer 12-矩陣中的路徑c++矩陣C++
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 劍指Offer題解合集
- 【劍指Offer】矩形覆蓋
- 劍指offer——跳臺階
- 六、劍指 Offer(25~29)
- 劍指offer-JavaScript版JavaScript
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- 刷題記錄:劍指offer+遇到的筆試題+LeetCode筆試LeetCode