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% 的使用者
相關文章
- 劍指 Offer 列印從1到最大n位數c++C++
- Leetcode劍指offer(八)LeetCode
- 劍指offer計劃9(動態規劃中等版)---java動態規劃Java
- 劍指offer計劃5(查詢演算法中等版)---java演算法Java
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer計劃20( 搜尋與回溯演算法中等)---java演算法Java
- LeetCode C++ 50. Pow(x, n)【Recursion】中等LeetCodeC++
- 劍指offer——正規表示式匹配C++C++
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- LeetCode-劍指Offer刷題記錄LeetCode
- LeetCode 劍指 Offer 05. 替換空格LeetCode
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer——二叉樹的深度C++二叉樹C++
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 劍指offer面試題12 列印1到最大的n位數面試題
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】左旋轉字串字串
- 【劍指offer】字串的排列字串
- 劍指Offer題解合集
- 劍指 Offer 12-矩陣中的路徑c++矩陣C++
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 劍指offer(C++)——把二叉樹列印成多行C++二叉樹
- LeetCode 劍指 Offer 65. 不用加減乘除做加法LeetCode
- leetcode *劍指 Offer 47. 禮物的最大價值LeetCode
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- 劍指 offer(1) -- 陣列篇陣列
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串轉整數字串
- 【劍指offer】字串的組合字串
- 劍指offer刷題記錄
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 《劍指 Offer》棧實現佇列佇列
- 劍指offer解析-下(Java實現)Java