剑指offer 6.5 发散思维能力

  • 面试题46:求1+2+…+n
    • 思路梳理
  • 面试题47:不用加减乘除做加法
    • 思路梳理
  • 面试题48:不能被继承的类

参考:

  1. 所有offer题目的LeetCode链接及python实现
  2. github Target offer

面试题46:求1+2+…+n

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

思路梳理

递归调用函数;
定义 func 字典,保存函数名称。

class Solution:def Sum_Solution(self, n):return self.sumN(n)def sum0(self, n):return 0# 利用非0值作两次非运算返回false, 0作两次非运算返回Truedef sumN(self, n):# 保存函数名称fun = {False: self.sum0, True: self.sumN}# 此处的fun[not not n] 不能写作func[not not n-1], 否则测试用例为0的话, 就会无限次迭代return n + fun[not not n](n - 1)def Sum_Solution2(self, n):return n and self.Sum_Solution2(n - 1) + n

面试题47:不用加减乘除做加法

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。

思路梳理

只能使用二进制的位运算;

  1. 相加即异或运算,01=1,10=1,00=0,11=00^1=1, 1^0=1, 0^0=0, 1^1=001=1,10=1,00=0,11=0,可以看出在1+1时未得到正确的结果;
  2. 对于1+1可以看成是,两个二进制相**“与”**之后,左移一位。只有两个数都是1的时候,位与得到的结果是1,其余都是0。
  3. 将1、2得到的结果相加,直到不产生进位为止(即2步的结果是全零)。
# 每次对num1进行与操作保证是一个32位的整形
num1 = temp & 0xFFFFFFFF
# 判断符号位是否为1做处理
if num1 >> 31 == 0 else num1 - 4294967296

完整代码:

# -*- coding:utf-8 -*-
class Solution:def Add(self, num1, num2):if not num1:return num2if not num2:return num1while num2 != 0:temp = num1 ^ num2num2 = (num1&num2) << 1# 每次对num1进行与操作保证是一个32位的整形num1 = temp & 0xFFFFFFFF# 判断符号位是否为1做处理return num1 if num1 >> 31 == 0 else num1 - 4294967296

面试题48:不能被继承的类

题目:用C++设计一个不能被继承的类。
略。

6.5 发散思维能力相关推荐

  1. 面试题之发散思维能力:如何用非常规方法求1+2+···+n

    今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家.   题目:求1+2+···+n,要 ...

  2. 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n

    <剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...

  3. 剑指offer 算法 (发散思维能力)

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解析:短路求值原理 class Solutio ...

  4. 64 求1+2+3+...+n(发散思维能力 )

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解题思路: 1)利用&&的短 ...

  5. 发散思维能力(1-2)

    题目描述1:求1+2+3+-+n 求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). Python测试: // ...

  6. [算法]发散思维能力题目

    1. 求1+2+3+...+n 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路 短路求值 ...

  7. 50本程序员圣经级别书籍!包邮送到家!一书在手,天下我有!

    来给大家送一波福利,这次联系了 10个好友一起给各位送书,每个号送 5 本,一共 50本,还包邮哦. 感谢大飞码字对本次活动的赞助.   金主介绍:大飞,腾讯资深架构师,技术leader.高中开始接触 ...

  8. IT旅途——程序员面试经验分享

    摘要:本文从IT人员的角度,一起分享面试道路上的坎坷.文章汇集几个知名公司的面试题,从出题的角度到分析问题的方法到解决问题较为全面的讲解面试题目,以供读者参考. 面试是职场的永恒话题,如何在职场面试中 ...

  9. 程序员面试题精选100题(08)-求1+2+...+n[C/C++/C#]

    题目:求1+2+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么 ...

  10. 程序员面试100题之四:求1+2+...+n

    题目:求1+2+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么 ...

最新文章

  1. 程序员转型人工智能工程师,如何在百忙之中不走岔路
  2. Batch Normalization的诅咒
  3. 删除所有的.svn文件夹
  4. 数据结构特性解析 (一) 数组
  5. 构建高性能J2EE应用的十个技巧
  6. PPT 下载 | 神策数据徐美玲:数据分析之产品应用实践
  7. SAP Spartacus 读取 Cart 的原理分析
  8. linux防火墙能阻止cc攻击吗,linux csf 防火墙 防止少量的ddos cc攻击很有效
  9. 8.5. JdbcTemplate
  10. JSON解析方式 gson
  11. python实验收获与反思 100字_期中考试总结与反思100字
  12. 一周信创舆情观察(5.6~5.9)
  13. 什么是信念?信任?信仰?
  14. 我用FreeMind 思维导图工具
  15. 如何在分析崩溃的边缘分析问题
  16. 发送端口25,465,587端口
  17. Nvidia nvenc cuvid + ffmpeg 硬编解码
  18. ceph-deploy源码分析(三)——mon模块 转
  19. 主数据管理平台功能模型介绍
  20. 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫

热门文章

  1. 中国开源走向第二梯队!
  2. 判断是否发生塑性变形的条件:von Mises屈服准则
  3. c语言乘方程序,C语言求幂计算的高效解法
  4. 21受限玻尔兹曼机RBM
  5. sklearn预测员工离职率
  6. 网站优化nofollow标签的作用,如何加nofollow标签
  7. 刀魔王带你了解创口贴圆辊刀模的应用
  8. 利用微信搜索抓取公众号文章
  9. cas22112-84-1/5,10,15,20-四(4-氨基苯)-21H,23H-卟啉简称:H2TAPP; Tph
  10. c语言fixed的用法,Fixed函数