当前位置: 首页 > news >正文

解决leetcode第3850题.统计结果等于k的序列数目

3850.统计结果等于K的序列数目

难度:困难

问题描述:

给你一个整数数组nums和一个整数k。

从初始值val=1开始,从左到右处理nums。在每个下标i处,你必须恰好选择以下操作之一:

将val乘以nums[i]。

将val除以nums[i]。

保持val不变。

在处理完所有元素后,当且仅当val的最终有理数值恰好等于k时,才认为val等于k。

返回生成val==k的不同选择序列的数量。

注意:除法是有理数除法(精确除法),而不是整数除法。例如,2/4=1/2。

示例1:

输入:nums=[2,3,2],k=6

输出:2

解释:

以下2个不同的选择序列导致val==k:

序列 对nums[0]的操作 对nums[1]的操作 对nums[2]的操作 最终val

1 乘法:val=1*2=2 乘法:val=2*3=6 保持val不变 6

2 保持val不变 乘法:val=1*3=3 乘法:val=3*2=6 6

示例2:

输入:nums=[4,6,3],k=2

输出:2

解释:

以下2个不同的选择序列导致val==k:

序列 对nums[0]的操作 对nums[1]的操作 对nums[2]的操作 最终val

1 乘法:val=1*4=4 除法:val=4/6=2/3 乘法:val=(2/3)*3=2 2

2 保持val不变 乘法:val=1*6=6 除法:val=6/3=2 2

示例3:

输入:nums=[1,5],k=1

输出:3

解释:

以下3个不同的选择序列导致val==k:

序列 对nums[0]的操作 对nums[1]的操作 最终val

1 乘法:val=1*1=1 保持val不变 1

2 除法:val=1/1=1 保持val不变 1

3 保持val不变 保持val不变 1

提示:

1<=nums.length<=19

1<=nums[i]<=6

1<=k<=10**15

问题分析:

对于元素个数为n的整数序列nums,其元素是固定不变的,生成val==k的不同选择序列,实际上是对这些元素使用*、/和保持不变形成各种操作序列,为此,约定对于*、/和保持不变三种操作,对应使用字符*、/和.来表示。对整数序列nums中每一个元素进行操作,首先应找出对各种元素进行可能操作的序列,然后再来判断这些操作结果是不是等于k,如果等于k,则统计val==k的记数器记数,并输出这种操作序列,最后再把记数器的值输出即可。

程序如下:

#对于n个元素的数组,每个元素都要进行三种处理*/.中的一种处理(其中.表示保持不变),共有多少种处理排列组合 def get_all_list(n): if n == 1: return ['.', '/', '*'] else: b = get_all_list(n - 1) t = [] for i in b: c = '.' + i t.append(c) c = '/' + i t.append(c) c = '*' + i t.append(c) return t #对于一次处理,返回处理结果,s表示一次处理,如*3、/2或者.5等等,val表示处理结果 def analysis_str(s,val): if s[0]=='.': return val else: val=eval(str(val)+s) return val #根据nums数组和操作符s生成操作序列 def create_operate_array(nums,s): t=list(zip(s,nums)) c=list(i[0]+str(i[1]) for i in t) return c #检查操作序列的操作结果是否等k def check_operate_array_result(operate_array,k): m=[] n=[] for i in operate_array: if i[0]=='*': m.append(i) else: n.append(i) m.extend(n) val=1 for i in m: val=analysis_str(i,val) return val==k #主程序 nums=eval(input('pls input nums=')) k=int(input('pls input k=')) n=len(nums) operate_array=get_all_list(n) c=0 for i in operate_array: val=1 operate_number_array = create_operate_array(nums,i) if check_operate_array_result(operate_number_array, k): print('操作序列:',operate_number_array) c += 1 print('不同选择序列数量为:',c)

运行实例一

pls input nums=[2,3,4,5,6]

pls input k=12

操作序列: ['.2', '*3', '*4', '.5', '.6']

操作序列: ['*2', '.3', '.4', '.5', '*6']

操作序列: ['/2', '.3', '*4', '.5', '*6']

不同选择序列数量为: 3

运行实例二

pls input nums=[1,1,5]

pls input k=1

操作序列: ['.1', '.1', '.5']

操作序列: ['/1', '.1', '.5']

操作序列: ['*1', '.1', '.5']

操作序列: ['.1', '/1', '.5']

操作序列: ['/1', '/1', '.5']

操作序列: ['*1', '/1', '.5']

操作序列: ['.1', '*1', '.5']

操作序列: ['/1', '*1', '.5']

操作序列: ['*1', '*1', '.5']

不同选择序列数量为: 9

http://www.jsqmd.com/news/417254/

相关文章:

  • 七层应用安全实战:WAF + 高防 + CDN 协同防护如何实现攻击自动拦截
  • 企业 DDoS 防御体系从 0 到 1 搭建:方案选型、部署流程与效果验证全指南
  • 飞书机器人
  • 分析破店肥蛤海鲜烧烤套餐,郑州哪家店性价比高 - 工业推荐榜
  • 多智能体协作元年:主流框架(CrewAI/LangGraph/AutoGen)Golang实现与对比
  • 2026年2月市面上硅微粉供应商口碑排行大曝光,环氧树脂/硅微粉/环氧树脂固化剂/玻璃纤维布/石英粉,硅微粉厂商推荐排行 - 品牌推荐师
  • 探寻2026年知名艺术涂料公司排名,家居艺术涂料价格行情 - 工业品牌热点
  • 理想国 - liyan
  • 【前沿解析】荣耀人形机器人MWC 2026发布:因果推理AI驱动的消费级具身智能革命
  • 2026年全国抗裂纤维厂家汇总 靠谱优质实力强 适配多场景需求 - 深度智识库
  • Agent Skills正在重塑所,掌握这个技能,让AI秒变你的数字专家
  • 2026年杭州背调公司发布:以i背调为代表的标杆企业深度解析, - 十大品牌推荐
  • 成都装修施工质量好的公司推荐|2026实测避坑,装友闭眼冲不踩雷 - 品牌测评鉴赏家
  • 如何追踪golang channel? - liyan
  • cf div2 1083 DEF
  • anime.js源代码分析
  • 2026白斑遮盖品牌推荐榜适配暴露部位防汗需求 - 真知灼见33
  • 黑魔法--用 ebpf 构建用户空间数据的桥梁 - liyan
  • 一文读懂:CommonJS 和 ES Module 的本质区别
  • 2026最新新美业抗衰仪器/美业黑科技仪器/智提拉美容仪/AI智能抗衰仪器/抗衰美容仪器推荐:科技赋能抗衰,这家品牌实力出圈 - 十大品牌榜
  • 2026最新植牙五补牙五大医院排名及解析,服务深度覆盖银川、宁夏、贺兰县、兴庆区、金凤区等地 - 十大品牌榜
  • 2026年防晒霜品牌推荐:权威榜单解析与科学选购指南 - 十大品牌推荐
  • 2026年杭州背调公司终极评测(权威机构双重背书)| 企业选型避坑全指南 - 十大品牌推荐
  • 成都环保装修公司实测!4家主流品牌对比,附材料避坑指南 - 品牌测评鉴赏家
  • 成都老房翻新装修公司推荐|2026实测不踩坑,博主亲测整理 - 品牌测评鉴赏家
  • 导师又让重写?8个AI论文平台测评:专科生毕业论文写作全攻略
  • 智能问数Agent上限之争:数据集vs语义层,哪种设计路线更适合你的业务?
  • 2026成都装修公司口碑红黑榜|靠谱选择指南+实力品牌推荐,避坑就看这篇 - 品牌测评鉴赏家
  • MCP、Agent Skills与A2A的定位对比
  • 2026年杭州背调公司推荐:以i背调为代表的标杆企业深度解析 - 十大品牌推荐