在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ On a Each value Now we view the projection of these cubes onto the xy, yz, and zx planes. A projection is like a shadow, that maps our 3 dimensional figure to a 2 dimensional plane. Here, we are viewing the "shadow" when looking at the cubes from the top, the front, and the side. Return the total area of all three projections. Example 1: Input: [[2]]
Output: 5
Example 2: Input: [[1,2],[3,4]]
Output: 17
Explanation:
Here are the three projections ("shadows") of the shape made with each axis-aligned plane.
Example 3: Input: [[1,0],[0,2]]
Output: 8
Example 4: Input: [[1,1,1],[1,0,1],[1,1,1]]
Output: 14
Example 5: Input: [[2,2,2],[2,1,2],[2,2,2]]
Output: 21
Note:
在 每个值 现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。 投影就像影子,将三维形体映射到一个二维平面上。 在这里,从顶部、前面和侧面看立方体时,我们会看到“影子”。 返回所有三个投影的总面积。 示例 1: 输入:[[2]] 输出:5 示例 2: 输入:[[1,2],[3,4]] 输出:17 解释: 这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。 示例 3: 输入:[[1,0],[0,2]] 输出:8 示例 4: 输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:14 示例 5: 输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:21 提示:
48ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 var xy = 0, xz = 0, yz = [Int]() 4 for row in grid { 5 var z = 0 6 for cell in 0..<row.count { 7 if row[cell] > 0 { 8 xy += 1 9 } 10 z = row[cell] > z ? row[cell] : z 11 if cell < yz.count { 12 yz[cell] = row[cell] > yz[cell] ? row[cell] : yz[cell] 13 } else { 14 yz.append(row[cell]) 15 } 16 17 } 18 xz += z 19 } 20 return xy + xz + yz.reduce(0, +) 21 } 22 } Runtime: 52 ms
Memory Usage: 19.3 MB
1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 var z:Int = 0 4 var x:Int = 0 5 var y:Int = 0 6 for i in 0..<grid.count 7 { 8 var mx:Int = 0 9 var my:Int = 0 10 for j in 0..<grid.count 11 { 12 mx = max(mx, grid[j][i]) 13 my = max(my, grid[i][j]) 14 if grid[i][j] > 0 15 { 16 z += 1 17 } 18 } 19 x += mx 20 y += my 21 } 22 return x + y + z 23 } 24 } 52ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 guard grid.count > 0, grid[0].count > 0 else { 4 return 0 5 } 6 var sumx = 0 7 var sumy = 0 8 var x = 0 9 var y = 0 10 var z = 0 11 for i in 0..<grid.count { 12 x = 0 13 for j in 0..<grid[0].count { 14 if grid[i][j] > 0 { 15 z += 1 16 x = max(x,grid[i][j]) 17 } 18 } 19 sumx += x 20 } 21 for i in 0..<grid[0].count { 22 y = 0 23 for j in 0..<grid.count { 24 if grid[j][i] > 0 { 25 y = max(y,grid[j][i]) 26 } 27 } 28 sumy += y 29 } 30 return sumx+sumy+z 31 } 32 } 56ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 let topShadow = grid.map { r in r.filter { $0 != 0 }.count }.reduce(0, +) 4 let xShadow = grid.reduce(0) { return $0 + ($1.max() ?? 0) } 5 let yShadow = Array(0 ..< grid[0].count).map { c in grid.map {$0[c] }.max() ?? 0 }.reduce(0, +) 6 return topShadow + xShadow + yShadow 7 } 8 } 60ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 var topCounter = 0 4 var leftCounter = 0 5 var rightCounter = 0 6 for i in 0..<grid.count { 7 var maxLine = 0 8 for j in 0..<grid[0].count { 9 if grid[i][j] != 0 { 10 topCounter += 1 11 } 12 maxLine = max(maxLine, grid[i][j]) 13 } 14 leftCounter += maxLine 15 } 16 17 for j in 0..<grid[0].count { 18 var maxCol = 0 19 for i in 0..<grid.count { 20 maxCol = max(maxCol, grid[i][j]) 21 } 22 rightCounter += maxCol 23 } 24 return topCounter + rightCounter + leftCounter 25 } 26 } 64ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 var total = 0 4 5 for i in 0..<grid.count { 6 var maxValue = 0 7 for j in 0..<grid[0].count { 8 if grid[i][j] != 0 { 9 total += 1 10 } 11 maxValue = max(maxValue, grid[i][j]) 12 } 13 total += maxValue 14 } 15 16 for j in 0..<grid[0].count { 17 var maxValue = 0 18 for i in 0..<grid.count { 19 maxValue = max(maxValue, grid[i][j]) 20 } 21 total += maxValue 22 } 23 24 return total 25 } 26 } 100ms 1 class Solution { 2 func projectionArea(_ grid: [[Int]]) -> Int { 3 //每个子数组的 count 相加 (要剔除0) 4 var x = 0 5 //每个 index 的最大值相加 6 var y = 0 7 //每个子数组的最大值相加 8 var z = 0 9 //用于统计每个 index 的最大值 key 为 index 10 var dictY: [Int: Int] = [:] 11 grid.forEach { (sun) in 12 if let max = sun.max() { 13 z += max 14 } 15 sun.enumerated().forEach({ (index, value) in 16 if value != 0 { 17 x += 1 18 } 19 if let tempY = dictY[index] { 20 if tempY < value { 21 //如果存在并小于,更新 22 dictY.updateValue(value, forKey: index) 23 } 24 }else { 25 //不存在直接更新 26 dictY.updateValue(value, forKey: index) 27 } 28 }) 29 } 30 dictY.values.forEach{y += $0} 31 return x + y + z 32 } 33 }
|
请发表评论