js/ts 将数字按照指定的拆分次数进行拆分
时间:2021-07-21
本文章向大家介绍js/ts 将数字按照指定的拆分次数进行拆分,主要包括js/ts 将数字按照指定的拆分次数进行拆分使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
代码如下:
/** * 将数字拆分为指定数量的子数字数组 * @param targetNumber 需要拆分的目标数字 * @param splitCount 拆分次数 * @returns 拆分后的子数字数组 */ private numberSplit(targetNumber: number, splitCount: number): Array<number> { // 当前拆分次数 let currSplitCount = 1, // 拆分后的数字 resultNumbers: Array<number> = [], // 当前拆分的数字 currSplitNumber = targetNumber, // 当前拆分的数字 currSplitNumber 被拆分后的子数字 splitedNumbers: Array<number> = [] // 循环拆分,如果当前拆分次数小于总拆分次数 while (currSplitCount < splitCount) { // 当前拆分的数字一分为二 splitedNumbers = this.numberDichotomy(currSplitNumber) // 将子数字合并到结果中 resultNumbers = resultNumbers.concat(splitedNumbers) // 累计拆分次数 currSplitCount++ // 判断当前拆分次数是否小于总拆分次数,如果是,则继续拆分 if (currSplitCount < splitCount) { // 获取子数字中最大的数字,作为下一次被拆分的数字,等待下一次拆分 currSplitNumber = Math.max(...splitedNumbers) // 如果子数字中最大的数字为1,则停止拆分 if (currSplitNumber === 1) break // 否则,将下次待拆分的数字从结果中移除,因为它会被一分为二的子数字替换 ArrayHelper.Remove(resultNumbers, currSplitNumber) } } // 累计子数字的和,用于验证是否与目标数字相等 const totalNumber = resultNumbers.reduce((total, curr) => total += curr, 0) console.log('目标数字', targetNumber, '拆分次数', splitCount, '拆分后的数字', resultNumbers.join(','), '子数字累计值', totalNumber, `目标数字 ${targetNumber === totalNumber ? '=' : '≠'} 子数字累计值`) return resultNumbers } /** * 将数字一分为二 * @param num 目标数字 * @returns 拆分后的子数字数组 */ private numberDichotomy(targetNum: number): Array<number> { if (targetNum < 2) return [targetNum] if (targetNum === 2) return [1, 1] // 随机获取 1~目标数字减1之间的数作为子数字1 const subNum1 = this.randomNum(1, targetNum - 1), // 目标数字减子数字1作为子数字2 subNum2 = targetNum - subNum1 // 子数字合并成结果 const resultNumbers = [subNum1, subNum2] return resultNumbers } /** * 生成从 min 到 max 的随机数 * @param min 最小值 * @param max 最大值 * @returns 随机数 */ private randomNum(min: number, max: number): number { switch (arguments.length) { case 1: return parseInt((Math.random() * min + 1).toString(), 10) case 2: return parseInt((Math.random() * (max - min + 1) + min).toString(), 10) default: return 0 } }
// 使用 const answers = this.numberSplit(target, step) console.log(answers)
代码使用 TypeScript 写的,js 使用去掉类型声明即可。
嘴角上扬,记得微笑
原文地址:https://www.cnblogs.com/jardeng/p/15040949.html
- Spring cache简单使用guava cache
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
- Java8学习(3)- Lambda 表达式
- Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
- java中byte, iso-8859-1, UTF-8,乱码的根源
- 如何启动一个本地静态服务器
- Hello ReactJS
- git合并历史提交
- 常用连续型分布介绍及R语言实现
- banner自动生成工具,ascii文字展示
- 快速排序
- 2016.07 第2周 群问题分享
- 游戏开发 - Math对象相关知识讲解
- 海量Web日志分析 用Hadoop提取KPI统计指标
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 重学Javascript之类型转换
- Spring Cloud 微服务(九)- 集成 Spring Boot Admin
- 聊聊dubbo-go的RPCInvocation
- 程序员是怎么记住一堆密码的?
- 腾讯大牛教你MySQL 8.0 PFS histogram解析与优化
- Python __init__.py 作用详解
- Python创建包,导入包
- Python查看模块(变量、函数、类)方法
- Python __doc__属性:查看文档
- Python __file__属性:查看模块的源文件路径
- python第三方库的安装pip的使用与换源
- 表白必备:C语言实现会变色的心
- 人心易变,这段有趣的C代码也一样,来看一下?
- 一个简单但能考察C语言基础的题目,试试?
- 这绝对是C语言的一个经典例题了!