File tree 2 files changed +56
-0
lines changed
2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change
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
+ ```
Original file line number Diff line number Diff line change
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
+ ```
You can’t perform that action at this time.
0 commit comments