[JS]题解 | #魔法数字#
题解 | #魔法数字#
题目链接
魔法数字
题目描述
牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。
操作共有三种,如下:
在当前数字的基础上加一,如:4转化为5
在当前数字的基础上减一,如:4转化为3
将当前数字变成它的平方,如:4转化为16
返回最少需要的操作数。
示例1
输入
3,10
输出
2
示例2
输入
1,10
输出
4
示例3
输入
24,500
输出
19
解题思路
本题实质上是简单递归,但剪枝过程比较复杂,如果不剪枝,一定会超时。
单单对n去判定效率是不够的(毕竟爱情是双向奔赴),所以我们要让m也靠近n。
let m1 = Math.floor(Math.sqrt(m));
let m2 = m1 + 1;
let sub1 = m > n ? m - n : n - m;
let sub2 = m1 > n ? m1 - n : n - m1;
sub2 += m - m1 * m1;
let sub3 = m2 > n ? m2 - n : n - m2;
sub3 += m2 * m2 - m;
这一段的意思,是寻找m的算术平方根,其中m1*m1<m
,m2*m2>m
,且m1+1=m2
。分别对m,m1,m2进行判断,看n能更快地“奔赴”哪一方。
当然,用m1和m2是有代价的——那就是|m-m1^2|
(或|m-m2^2|
),就是它们的平方与m之间的差距。
这一思想还是很好理解的,将测试数据代入并思考即可理解。
于是,n只会+1或者-1,而m只会取平方根,取平方根取整后再平方的值与m的差距为n的步长。
/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param n int整型 表示牛牛的数字* @param m int整型 表示牛妹的数字* @return int整型*/
function solve( n , m ) {// write code hereif (m <= n)return n - m;else {let min = m - n;let find = (n, m, step) => {if (step > min)return;if (n == m) {if (step < min) {min = step;}return;}let m1 = Math.floor(Math.sqrt(m));let m2 = m1 + 1;let sub1 = m > n ? m - n : n - m;let sub2 = m1 > n ? m1 - n : n - m1;sub2 += m - m1 * m1;let sub3 = m2 > n ? m2 - n : n - m2;sub3 += m2 * m2 - m;if (sub2 < sub1 && sub2 < sub3 && n != 1) {find(n, m1, step + 1 + m - m1 * m1);} else if (sub3 < sub1 && sub3 <= sub2 && n != 1) {find(n, m2, step + 1 + m2 * m2 - m);} else {if (n < m)find(n + 1, m, step + 1);elsefind(n - 1, m, step + 1);}}find(n, m, 0);return min;}
}
module.exports = {solve : solve
};
[JS]题解 | #魔法数字#相关推荐
- [ASDFZ-NOIP2016模拟]魔法数字
魔法数字 (magic.cpp/c/pas) 题目描述 在数论领域中, 人们研究的基础莫过于数字的整除关系. 一般情况下, 我 们说整除总在两个数字间进行,例如 a | b(a 能整除 b) 表示 b ...
- js只能输入数字,小数点(整理)
<html> <head> <meta http-equiv="content-Type" content="text/html;chars ...
- js的数据类型--数字
近期做一些项目的时候发现,自己的js基础还是不够扎实,再看一遍犀牛书,加深自己的理解和印象.所以从这篇文章开始,后面都是关于原生js的一些内容. 这篇文章,我们具体介绍一下js的数据类型其中一种. j ...
- js判断输入数字是否是整数,金额、数字
function isIntNum(strNum){//js判断输入数字是否是整数 仅供学习思想var strCheckNum = strNum+"";if(strCheckNum ...
- JS正则表达式验证数字非常全 - 吾心无所 - 博客园
JS正则表达式验证数字非常全 Js代码 <script type="text/javascript"> function SubmitCk() { var reg = ...
- MUI 里js动态添加数字输入框后,增加、减少按钮无效
https://www.cnblogs.com/ssjf/p/10193652.html numbox 的自动初化是在 mui.ready 时完成的 mui 页面默认会自动初始化页面中的所有数字输入框 ...
- js布尔类型+数字判断_C ++中的布尔数据类型
js布尔类型+数字判断 In this article, we'll take a look at the Bool datatype in C++. 在本文中,我们将介绍C ++中的Bool数据类型 ...
- JS字符串过滤数字_过滤大写数字
JS字符串过滤数字_过滤大写数字 代码案例: //数字替换 if(data.summary){data.summary=data.summary.replace(/[\d|壹|贰|叁|肆|伍|陆|柒| ...
- 编程领域名词:魔法数值、魔法数字、魔法值
魔法数值.魔法数字.魔法值,这是一个东西,不同的叫法. 魔法数字,在编程领域指的是莫名其妙出现的数字.数字的意义必须通过详细阅读才能推断出来.一般魔法数字都是需要使用枚举变量来替换的. 魔法数字常见于 ...
最新文章
- CapsuleNet(了解)
- 知乎热帖:Qt 这么强大为什么火不起来?
- JFrame 简单使用
- 原创“.NET研究”企业级控件库之图片浏览控件
- android 跑分软件,跑分软件安兔兔公布了6月份Android手机性能榜TOP10
- CV之face_recognition:Py之face_recognition库安装、介绍、使用方法详细攻略
- 4.Java中的关键字和标识符
- 【求助】如何从 Spark 的 DataFrame 中取出具体某一行?我自己的一些思考
- 数字孪生-输电铁塔及线路的结冰、融化
- (79)【按键】[独立按键] - 1: 单击,双击,三击以及N击
- 怎么批量查询银行卡号是哪个银行?
- 交互体验设计优秀的产品
- 解决pycharm里显示数据不完全问题(pandas)
- 如何对文本框进行功能测试
- UE4+手柄对应按键测试
- 三维扫描系列 点云绪论
- Android如何动态更换桌面图标(巨坑)
- 论文浅尝 - IJCAI2022 | 基于自适应虚词增强的小样本逆关系分类
- 45RF SOI CMOS
- 关于office及edge浏览器无法登录微软账号的问题
热门文章
- 妙用postman系列——postman建组、分享
- 2021-2027全球与中国跨临界二氧化碳系统市场现状及未来发展趋势报告
- 2022-2028年中国金属薄膜行业市场深度监测及投资潜力研究报告
- Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务
- 关于某日访问次数最多的IP的topK问题的三种解法
- 快速通过nginx配置域名访问
- 解决LC_ALL: 无法改变区域选项 (UTF-8): 没有那个文件或目录的问题
- 每个人都应该有一个梦想
- 如何用python读取文本中指定行的内容
- CPU0 处理器的架构及应用