@@ -8,33 +8,62 @@ def largestNumber(self, cost, target):
8
8
:type target: int
9
9
:rtype: str
10
10
"""
11
- dp = [0 ] + [ - 1 ] * ( target )
11
+ dp = [0 ]
12
12
for t in xrange (1 , target + 1 ):
13
+ dp .append (- 1 )
13
14
for i , c in enumerate (cost ):
14
15
if t - c < 0 or dp [t - c ] < 0 :
15
16
continue
16
17
dp [t ] = max (dp [t ], dp [t - c ]+ 1 )
17
18
if dp [target ] < 0 :
18
19
return "0"
19
20
result = []
20
- for i in reversed (xrange (1 , 9 )):
21
+ for i in reversed (xrange (9 )):
21
22
while target >= cost [i ] and dp [target ] == dp [target - cost [i ]]+ 1 :
22
23
target -= cost [i ]
23
- result .append (i )
24
+ result .append (i + 1 )
24
25
return "" .join (map (str , result ))
25
26
26
27
28
+ # Time: O(t)
29
+ # Space: O(t)
30
+ class Solution2 (object ):
31
+ def largestNumber (self , cost , target ):
32
+ """
33
+ :type cost: List[int]
34
+ :type target: int
35
+ :rtype: str
36
+ """
37
+ def key (bag ):
38
+ return sum (bag ), bag
39
+
40
+ dp = [[0 ]* 9 ]
41
+ for t in xrange (1 , target + 1 ):
42
+ dp .append ([])
43
+ for d , c in enumerate (cost ):
44
+ if t < c or not dp [t - c ]:
45
+ continue
46
+ curr = dp [t - c ][:]
47
+ curr [~ d ] += 1
48
+ if key (curr ) > key (dp [t ]):
49
+ dp [- 1 ] = curr
50
+ if not dp [- 1 ]:
51
+ return "0"
52
+ return "" .join (str (9 - i )* c for i , c in enumerate (dp [- 1 ]))
53
+
54
+
27
55
# Time: O(t^2)
28
56
# Space: O(t^2)
29
- class Solution (object ):
57
+ class Solution3 (object ):
30
58
def largestNumber (self , cost , target ):
31
59
"""
32
60
:type cost: List[int]
33
61
:type target: int
34
62
:rtype: str
35
63
"""
36
- dp = [0 ] + [ - 1 ] * ( target )
64
+ dp = [0 ]
37
65
for t in xrange (1 , target + 1 ):
66
+ dp .append (- 1 )
38
67
for i , c in enumerate (cost ):
39
68
if t - c < 0 :
40
69
continue
0 commit comments