剑指offer64

剑指offer64:求1+2+…+n

题目描述

       求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

示例 1:

输入: n = 3
输出: 6
示例 2:

输入: n = 9
输出: 45


限制:

1 <= n <= 10000

解法一:利用逻辑与的短路特性实现递归终止 (执行用时:0ms,内存消耗6.3MB)

        重点是输入0的时候输出0来结束递归。缺点:递归的层数不能太深<3000

class Solution {
public:
    int sumNums(int n) {
        int ans = n;
        ans && (ans += sumNums(n - 1));
        return ans;

    }
};

解法二:利用bool或者char类型计算二维数组的大小 (执行用时:0ms,内存消耗6MB)

/*****************************************************
解法二:利用bool或者char类型计算二维数组的大小 (执行用时:0ms,内存消耗6MB)
思路:
bool类型和char类型都占用一个字节长度
用sizeof计算数组a所占空间的大小为n*(n+1),再右移一位相当于除2,等价于等差数列的前n项和公式

sizeof用来计算一个变量,或者数据类型的长度,以字节为单位。
对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。
*****************************************************/
class Solution2 {
public:
    int sumNums(int n) {
        char a[n][n + 1];  //bool类型和char类型都占用一个字节长度
        return sizeof(a) >> 1; //用sizeof计算数组a所占空间的大小为n*(n+1),再右移一位相当于除2,等价于等差数列的前n项和公式                      
    }
};

   转载规则


《剑指offer64》 赵小亮 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Leetcode217 Leetcode217
Leetcode217:存在重复元素 题目描述       给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 fal
2020-04-17
下一篇 
Leetcode283 Leetcode283
LeetCode283:移动零         给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [
2020-04-15
  目录