剑指offer——面试题46:求1+2+…+n

题目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
个人感觉这个题听创新的,现在把集中有代表性的解法总结在这里。

Solution1:(重点)

利用变长数组.
C99标准引入了变长数组,它允许使用变量定义数组各维,关于变长数组详见《C Primer Plus(第五版)》P273.
这是我知道的代码最简洁的方法。
参考网址:https://www.nowcoder.com/profile/5104574/codeBookDetail?submissionId=15519030

class Solution {
public:int Sum_Solution(int n) {bool a[n][n+1];return sizeof(a)>>1;}
};

Solution2:

利用构造函数,树上的思路(理解的不是很透彻。。)
循环只是让相同的代码重复执行n遍而已。先定义一个类型,接着创建n个该类型的实例,那么这个类型的构造函数将确定会被调用n次。我们可以将与累加相关的代码放到构造函数里。

class Temp {
public:Temp() { ++N; Sum += N; }static void Reset() { N = 0; Sum = 0; }static unsigned int GetSum() { return Sum; }
private:static unsigned int N;static unsigned int Sum;
};unsigned int Temp::N = 0;
unsigned int Temp::Sum = 0;class Solution {
public:int Sum_Solution(int n) {Temp::Reset();Temp *a = new Temp[n];delete []a;a = NULL;return Temp::GetSum();}
};

Solution3:

利用虚函数,具体看书中解释(同样理解的不是很透彻。。。->_<-)

class A;
A* Array[2];class A {
public:virtual unsigned int Sum (unsigned int n){return 0;}
};class B: public A {
public:virtual unsigned int Sum (unsigned int n) {return Array[!!n]->Sum(n-1) + n;}
};class Solution {
public:int Sum_Solution(int n) {A a;B b;Array[0] = &a;Array[1] = &b;int value = Array[1]->Sum(n);return value;}
};

Solution4:

利用函数指针求解(同样理解的不是很透彻。。。->_<-)

typedef int (*func)( int );
class Solution {
public:static int Solution1(int n ){ return 0;}static int Sum_Solution(int n) {static func f[2] = {Solution1,Sum_Solution};return n+f[!!n](n-1);}
};

Solution5

利用模板求解

//缺点多&&难理解==》算了吧

Solution6:(重点)

这个递归写的真是666~~
参考网址:https://www.nowcoder.com/profile/5104574/codeBookDetail?submissionId=15519030
解题思路:
1.需利用逻辑与的短路特性实现递归终止。 2.当ans == 0时,(ans > 0) && (ans += Sum_Solution(ans - 1))只执行前面的判断,为false,然后直接返回0;
3.当n > 0时,执行ans += Sum_Solution(ans - 1),实现递归计算Sum_Solution(n)。
真是666啊!

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

剑指offer——面试题46:求1+2+...+n相关推荐

  1. 剑指Offer - 面试题64. 求1+2+…+n(递归)

    1. 题目 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6示例 ...

  2. 剑指offer 面试题64. 求1+2+…+n

    求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6 示例 2: ...

  3. 剑指offer面试题64. 求1+2+…+n(逻辑符短路)(递归)

    题目描述 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路 详见链接 代码 class Solution ...

  4. 剑指offer面试题之求第n个丑数

    1,问题: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 2,想法 ...

  5. 剑指Offer - 面试题46. 把数字翻译成字符串(DP)

    1. 题目 给定一个数字,我们按照如下规则把它翻译为字符串: 0 翻译成 "a" , 1 翻译成 "b",--, 11 翻译成 "l",-- ...

  6. 剑指offer——面试题9:求斐波那切数列的四种方法

    剑指offer--面试题9:求斐波那切数列的四种方法 另一个相关的链接:https://blog.csdn.net/Allenlzcoder/article/details/80297333 总结下求 ...

  7. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  8. (补充)【打印1到最大的n位数】剑指offer——面试题12:打印1到最大的n位数

    剑指offer--面试题12:打印1到最大的n位数 此题在牛客网上没有OnlineJudge,在此补充两种做法. 参考网址:https://blog.csdn.net/yanxiaolx/articl ...

  9. 【重点】剑指offer——面试题62:序列化二叉树

    剑指offer--面试题62:序列化二叉树 Solution1: 参考网址:https://www.nowcoder.com/profile/6475323/codeBookDetail?submis ...

最新文章

  1. 基于Python Tornado的在线问答系统
  2. SAP同一公司不同工厂间物料转储方案比较
  3. 【project】十次方-01
  4. MATLAB矩阵操作和算术运算符
  5. 第五十四篇 Linux相关——远程连接SSH
  6. python traceback most recent_pyspider启动错误: Traceback (most recent call last):
  7. webserver之定时器
  8. eclipse springmvc+Thymeleaf
  9. 计算机常见知识大全,电脑基本知识
  10. esp8266使用安信可IDE编译、烧录
  11. 写给Gallen1983
  12. 微信聊天记录怎么备份?
  13. 9.群智能算法及其应用: 粒子群优化算法及应用, 蚁群算法及其应用
  14. 数据科学的重要支柱——统计学的最佳入门书籍
  15. 计算机专业英语教程(第二版)Chapter 4 Database Fundamentals
  16. 深度诗歌阅读:你永远是个孩子
  17. phonex的使用,二级索引,预分区,调优
  18. 【管理】需求分析与软件设计|需求分析报告和需求规格说明书的区别
  19. C++关于函数声明 函数实现
  20. pip download与pip install简介

热门文章

  1. caffe---之eltwise层
  2. python随机森林库_随机森林库:R和Python中的不同结果
  3. OpenCV图像处理(4)——去除小面积
  4. mysql生成uui mybatis,MyBatis自动生成UUID并返回
  5. 微软云 mysql 重启_停止Azure MySQL PaaS数据库
  6. 酒吧声场测试软件,做到以下几点 酒吧音响效果出奇的好
  7. 全局配置_中兴天机配置公布:智汇屏+全局黑暗模式
  8. 简述中断处理的6个步骤_基于SCDM软件的CFD前处理工作5个步骤
  9. markdown一边写一边预览_MarkDown使用笔记
  10. 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个