1. 题目

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。
可以使用加号、减号、位移,但要吝啬一些。

示例1:输入:A = 1, B = 10输出:10示例2:输入:A = 3, B = 4输出:12提示:
保证乘法范围不会溢出

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/recursive-mulitply-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 右移1位 == 除以2
  • 左移1位 == 乘以2

2.1 递归

class Solution {public:int multiply(int A, int B) {if(A < B)A^=B^=A^=B;//swap大的在前,少递归几次if(B==1)return A;if((B&1)==0)//B是偶数return multiply(A,B>>1)<<1;elsereturn A + (multiply(A,B>>1)<<1);}
};

2.2 循环

class Solution {public:int multiply(int A, int B) {int i = 0, ans = 0;if(A < B)A^=B^=A^=B;//swap大的在前while(B)//把B分解成2进制数,对每一位乘以A{if((B&1)==1)//该位为1(1,2,4,8,16)ans += A<<i;//移动0,1,2,3,4位B >>= 1;//B的每位移到最右 & 1来判断i++;}return ans;}
};

程序员面试金典 - 面试题 08.05. 递归乘法(位运算)相关推荐

  1. 程序员面试金典 - 面试题 08.13. 堆箱子(DP)

    1. 题目 堆箱子.给你一堆n个箱子,箱子宽 wi.深 di.高 hi. 箱子不能翻转,将箱子堆起来时,下面箱子的宽度.高度和深度必须大于上面的箱子. 实现一种方法,搭出最高的一堆箱子.箱堆的高度为每 ...

  2. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)

    1. 题目 栈排序. 编写程序,对栈进行排序使最小元素位于栈顶. 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中. 该栈支持如下操作:push.pop.peek 和 ...

  3. [Leetcode][程序员面试金典][面试题08.03][JAVA][魔术索引][递归][优化]

    [问题描述][简单] [解答思路] 1. 逐个查找 时间复杂度:O(N) 空间复杂度:O(1) public int findMagicIndex(int[] nums) {for (int i = ...

  4. 程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 动态规划 1. 题目 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列. 机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍 ...

  5. 程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)

    1. 题目 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false).1 (true).& (AND). | (OR) 和 ^ (XOR) 符号组成. 实现一个函 ...

  6. 程序员面试金典 - 面试题 17.05. 字母与数字(哈希map+思维转换)

    1. 题目 给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同. 返回该子数组,若存在多个最长子数组,返回左端点最小的.若不存在这样的数组,返回一个空数组. 示例 1: 输入 ...

  7. 程序员面试金典 - 面试题 08.11. 硬币(背包DP)

    文章目录 1. 题目 2. 解题 1. 题目 硬币.给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码计算 n 分有几种表示法.(结果可能会很大,你需要将结果模上1000000007) 示 ...

  8. 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)

    1. 题目 无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1:输入:S = "qwe"输出:["qwe", & ...

  9. 程序员面试金典 - 面试题 16.05. 阶乘尾数(5的因子)

    1. 题目 设计一个算法,算出 n 阶乘有多少个尾随零. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数 ...

最新文章

  1. OpenMP在Windows下用VS使用
  2. Nginx正则表达式之匹配操作符详解
  3. rpm批量卸载所有带有Java的文件
  4. 【每日算法Day 79】所有人都会做的入门题,但是能看出你的代码能力!
  5. linux源码分析工具
  6. 多媒体计算机的组成元素,什么是多媒体计算机的组成
  7. 参考文献,bib文件格式
  8. PPT文件太大?如何压缩PPT?这几招教你搞定
  9. 彩虹表MD5破解分析
  10. 深圳礼品展上新“缤纷食品馆” 解锁员工福利新场景
  11. 哲理故事与管理之道(11)-让自己成为领袖和榜样
  12. 央企建筑公司数字化转型最大挑战是什么?如何破解?
  13. 用JS代码自动填写正方教务系统的教学评价
  14. 击碎“基因决定论”和“1万小时理论”认知误区!这本书告诉你怎么快速成长!
  15. lol查询服务器角色信息,游戏账号角色查询
  16. 2022前端都考察些什么
  17. pyinstaller 把python编译成二进制
  18. VUE项目制作大致方法和流程
  19. react生命周期及hooks
  20. 如何成功发表一篇论文(最全攻略) ——建议收藏

热门文章

  1. 微型计算机选用要点,微型计算机原理以及应用考试_new要点分析.doc
  2. linux内核的I2C子系统详解4——i2c-s3c2410.c文件中的adapter、algorithm
  3. jdk8 Function
  4. BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】
  5. [Swift]loadNibNamed方法
  6. java——IO流整理(一)
  7. 行先知 为您的办公室管理提供方便
  8. ADO.NET、ODP.NET、Linq to SQL、ADO.NET Entity 、NHibernate在Oracle下的性能比较
  9. 用MS SQL Server事件探查器来跟踪数据库的操作
  10. 致驱动工程师的一封信