JAVA练习174-递归乘法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
示例1:
输入:A = 1, B = 10
输出:10
示例2:
输入:A = 3, B = 4
输出:12
提示:
- 保证乘法范围不会溢出
分析:
方法:模拟+位运算
3 * 4 可以看做 4 + 4 + 4,即 A 个 B 或 B 个 A 相加,让大的那个数当加数显然更节省时间一些,当小的数减为 0 时,终止循环。因为 3 * 4 可以看做 4 + 2 * 4 = 4 + ( 4 << 1 ),因此还通过判断小的那个数是否为偶数来进行移位运算。
时间复杂度:O(log n) n 为 A、B 中最小的数,因为每遍历两次一定有一次为偶数,最优情况如 4 * 8 直接遍历 log n 次就可以了,最坏情况也不会达到 O(n)。
空间复杂度:O(log n)
class Solution {public int multiply(int A, int B) {//保证A比B小if(A > B){return multiply(B, A);}//A为0if(A == 0){return 0;}//A能被2整除if(A % 2 == 0){return multiply(A >> 1, B) << 1;}//递归return B + multiply(A-1, B);}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/recursive-mulitply-lcci
JAVA练习174-递归乘法相关推荐
- python 递归乘法
递归乘法 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘.可以使用加号.减号.位移,但要吝啬一些.示例1:输入:A = 1, B = 10输出:10 示例2:输入:A = 3, ...
- java 7.函数-递归_带有谓词的Java中的函数样式-第1部分
java 7.函数-递归 您一直在听到将要席卷全球的函数式编程,而您仍然坚持使用普通Java? 不用担心,因为您已经可以在日常Java中添加一些功能样式. 此外,它很有趣,可以节省许多代码行并减少错误 ...
- java 7.函数-递归_带有谓词的Java中的函数样式-第2部分
java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...
- java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)
Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...
- 程序员面试金典 - 面试题 08.05. 递归乘法(位运算)
1. 题目 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘. 可以使用加号.减号.位移,但要吝啬一些. 示例1:输入:A = 1, B = 10输出:10示例2:输入:A = ...
- strassen算法java_使用java写的矩阵乘法实例(Strassen算法)_Java_软件编程
Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...
- Java如何打印输出九九乘法表
Java如何打印输出九九乘法表 -- -- -- -- -- -- -- -- -- -- -- -- -- 打印乘法表的方法 1.使用双重for循环打印九九乘法表 2.使用do{}while()实现 ...
- Java如何打印九九乘法表
Java如何打印九九乘法表 分析: 要打印九九乘法表,可以借助双重循环先看整体,有9行,所以就先用一个for循环,for(i=1;i<=9;i++): 再将每一个看作一个整体,第一行打印一个,第 ...
- 用Java代码打印99乘法表
用Java代码打印99乘法表: package Review.jiujiuChengFaBiao; public class Test32_ForExcersize { public static v ...
最新文章
- MaxCompute,基于Serverless的高可用大数据服务
- git 提交代码命令_Git命令可视化展示,代码管理再也不愁了,建议收藏!
- 第一章:linux管理文件和目录
- WF 创建 SQL 持久性数据库
- 自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法
- Abp Uow 设计
- 【AI视野·今日CV 计算机视觉论文速览 第156期】Mon, 9 Sep 2019
- 数据结构中为什么输入数据还没输入完全就结束了_我岂能忍!面试官居然用数据结构和算法“羞辱”我...
- css在线工具_已迁移
- APP被苹果App Store拒绝的原因
- 声笔飞码6.00版使用指南
- html 4种居中方式
- 【Vulnhub靶场】NOOB: 1
- unity 彩带粒子_unity游戏缤纷五彩纸屑粒子特效Confetti FX 1.0
- CF - 1156D - 0-1-Tree
- 面向对象系列(二)-封装,继承,多态
- 2018.10.19学习总结
- 万国觉醒服务器维护,万国觉醒好像没看到1服怎么回事 官方关闭部分服务器公告[多图]...
- spring-boot、jeecg-boot中解除shiro限制了上传视频文件,以及设置上传文件大小的限制
- mc服务器常用指令_mc服务器新手指令
热门文章
- 【浏览器】1219- 换一种风格理解 Chrome 浏览器渲染全过程
- Python批量获取高校基本信息
- 武汉大学计算机技术上机难度,武汉大学计算机技术(专业学位)考研难不难和研究生专业好不好...
- python实现图片批量重命名
- 【学习笔记】云服务器入门教程(搭建云盘、网站,安装anaconda、WinSCP、宝塔面板等)
- java农业银行面试题
- 元宇宙:下一代互联网的“美丽新世界”
- gradle-6.7.1-all 快速下载
- 使用python实现IP反查域名
- c语言局部函数定义是非法的,疑难问题C语言求解释 为什么编译说是局部函数非法??...