Skip to content

Commit 28adb21

Browse files
committed
update
1 parent 1163d98 commit 28adb21

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

67. 分割等和子集.md

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
***给你一个只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。***
2+
3+
```
4+
输入:nums = [1,5,11,5]
5+
输出:true
6+
解释:数组可以分割成 [1, 5, 5] 和 [11] 。
7+
```
8+
9+
```
10+
class Solution(object):
11+
def canPartition(self, nums):
12+
"""
13+
:type nums: List[int]
14+
:rtype: bool
15+
"""
16+
#dp[ i ][ j ]定义为从数组nums中 0 - i 的元素进行取舍可以得到 j 的方法数量
17+
n = len(nums)
18+
allsum = sum(nums)
19+
if allsum % 2 != 0:
20+
return False
21+
target = allsum/2
22+
dp = [[0]*(target+1) for _ in range(n)]
23+
24+
dp[0][0] = 1
25+
for j in range(1,target+1):
26+
if j == nums[0]:
27+
dp[0][j] = 1
28+
29+
for i in range(1,n):
30+
for j in range(target+1):
31+
if (j-nums[i]) >= 0:
32+
dp[i][j] = dp[i-1][j]+dp[i-1][j-nums[i]]
33+
else:
34+
dp[i][j] = dp[i-1][j]
35+
return True if dp[-1][-1] else False
36+
```

68. 零钱兑换.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
***给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。***
2+
3+
```
4+
class Solution(object):
5+
def coinChange(self, coins, amount):
6+
"""
7+
:type coins: List[int]
8+
:type amount: int
9+
:rtype: int
10+
"""
11+
#dp[i]代表凑成金额 i 所需最少的硬币个数。
12+
dp = [float('inf')] * (amount + 1)
13+
dp[0] = 0
14+
15+
for i in range(1, amount+1):
16+
for coin in coins:
17+
if (i-coin) >= 0:
18+
dp[i] = min(dp[i], dp[i-coin]+1)
19+
return dp[-1] if dp[-1]!=float('inf') else -1
20+
```

0 commit comments

Comments
 (0)