[Swift]LeetCode474. 一和零 | Ones and Zeroes
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",n = 3 输出: 4 解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 "10","0" 。 示例 2: 输入: Array = {"10",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],_ 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |