在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue. For now, suppose you are a dominator of m Now your task is to find the maximum number of strings that you can form with given m Note:
Example 1: Input: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3 Output: 4 Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are “10,”0001”,”1”,”0” Example 2: Input: Array = {"10", "0", "1"}, m = 1, n = 1 Output: 2 Explanation: You could form "10", but then you'd have nothing left. Better form "0" and "1". 在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着 m 个 你的任务是使用给定的 m 个 注意:
示例 1: 输入: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3 输出: 4 解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 "10","0001","1","0" 。 示例 2: 输入: Array = {"10", "0", "1"}, m = 1, n = 1 输出: 2 解释: 你可以拼出 "10",但之后就没有剩余数字了。更好的选择是拼出 "0" 和 "1" 。 Runtime: 4936 ms
Memory Usage: 4.1 MB
1 class Solution { 2 func findMaxForm(_ strs: [String], _ m: Int, _ n: Int) -> Int { 3 var dp:[[Int]] = [[Int]](repeating:[Int](repeating:0,count:n + 1),count:m + 1) 4 for str in strs 5 { 6 var zeros:Int = 0 7 var ones:Int = 0 8 for c in str.characters 9 { 10 if c == "0" 11 { 12 zeros += 1 13 } 14 else 15 { 16 ones += 1 17 } 18 } 19 if zeros <= m && ones <= n 20 { 21 for i in (zeros...m).reversed() 22 { 23 for j in (ones...n).reversed() 24 { 25 //递推公式 26 dp[i][j] = max(dp[i][j], dp[i - zeros][j - ones] + 1) 27 } 28 } 29 } 30 } 31 return dp[m][n] 32 } 33 } 105934 kb1 class Solution { 2 func findMaxForm(_ strs: [String], _ m: Int, _ n: Int) -> Int { 3 let l = strs.count 4 var dp: [[[Int]]] = Array(repeating: Array(repeating: Array(repeating:0, count: n + 1), count: m + 1), count: l + 1) 5 for i in 0 ... l { 6 let counts = i == 0 ? (0, 0) : getCounts(strs[i - 1]) 7 for j in 0 ... m { 8 for k in 0 ... n { 9 if i == 0 { 10 dp[i][j][k] = 0 11 } else if j >= counts.0 && k >= counts.1 { 12 dp[i][j][k] = max(dp[i - 1][j][k], dp[i - 1][j - counts.0][k - counts.1] + 1) 13 } else { 14 dp[i][j][k] = dp[i - 1][j][k] 15 } 16 } 17 } 18 } 19 return dp[l][m][n] 20 } 21 22 private func getCounts(_ str: String) -> (Int, Int) { 23 let s = Array(str) 24 var zeroCount = 0 25 s.forEach { 26 if $0 == "0" { 27 zeroCount += 1 28 } 29 } 30 return (zeroCount, s.count - zeroCount) 31 } 32 }
|
请发表评论