当前位置:网站首页>leetcode:494.数组中添加加减运算符得到指定值的所有方法
leetcode:494.数组中添加加减运算符得到指定值的所有方法
2022-06-28 03:06:00 【OceanStar的学习笔记】
题目来源
题目描述

题目解析
暴力递归
定义:对于数组arr[idx…]中所有的数字,搞出rest这个数,方法是多少。
int process(std::vector<int>&arr, int idx, int rest);
base case:
- 当没有数了,就没有选择了,这个时候看rest是否为0,如果为0,表示找到了一种方法,其他都是没有找到方法
普通情况:
- 就是base case之外的情况,也就是还有数可以选择
- 这个时候,我们要决定对arr[idx]做出选择,做出选择就会对rest造成影响。最后将剩下的递归给arr[idx+1…]
备忘录
对于:
int process(std::vector<int>&arr, int idx, int rest);
只要可变参数idx和rest固定了,那么process的返回值也就固定了
因此,我们只要用一个map指缓存起来,然后如果有,就直接去查就可以,没有就去计算
暴力递归改动态规划
优化
原问题等同于: 找到nums一个正子集P和一个负子集N,使得总和等于target。即
s u m ( P ) − s u m ( N ) = = t a r g e t sum(P) - sum(N) == target sum(P)−sum(N)==target
同时有:
s u m ( P ) + s u m ( N ) = = s u m sum(P) + sum(N) == sum sum(P)+sum(N)==sum
上面两式相加,得到
2 ∗ s u m ( P ) = = t a r g e t + s u m ( n u m s ) 2 * sum(P) == target + sum(nums) 2∗sum(P)==target+sum(nums)
其中target + sum(nums)必须>=0且为偶数,否则等式不可能成立。
则问题转换为:有一些物品,第i个物品的重量为nums[i], 背包的容量为sum§,问:有多少种方式将背包【恰好填满】
边栏推荐
猜你喜欢

自用工具 猴子都会用的unity视频播放器

Extensible database (Part 2)

小程序image组件不显示图片?

机器人编程教育的市场竞争力

matlab习题 —— 矩阵的常规运算

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3

从遇见大咖到成为大咖,昇腾AI开发者创享日给开发者带来无限可能

Set drop-down options on Excel files

Importer un fichier Excel, résoudre le problème de sauter les cellules vides et de ne pas lire, et avancer l'indice, et retourner Blank As NULL Red

【毕业季】研究生の毕业总结
随机推荐
组件拆分实战
Documentation issues
基于 WPF 的酷炫 GUI 窗口的简易实现
Hot! Yolov6's fast and accurate target detection framework is open source (with source code download)
Sublime Text 3 基本配置教程
数据库乱码问题
局域网内共享打印机的几种方式
数组的方法
uni-app 如何根据环境自动切换请求的地址
大咖说·计算讲谈社|什么是东数西算要解决的核心问题?
自用工具 猴子都会用的unity视频播放器
CURDATE()和NOW()区别
力扣每日一题-第29天-523.在区间范围统计奇数数目
用于 C# 的 SQL 基本语法总结
Anaconda command usage
crond BAD FILE MODE /etc/cron. d
Lamaba表达式学习及常用函数式接口
No&nbsp; result&nbsp; defined&amp; nbsp…
力扣每日一题-第29天-219.存在重复元素Ⅱ
如何给Eclips自动添加作者,时间等…