leetCode892. 计算三维形体的表面积

94 views次阅读
没有评论

在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体。 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1: 输入:[[2]] 输出:10 示例 2: 输入:[[1,2],[3,4]] 输出:34 示例 3: 输入:[[1,0],[0,2]] 输出:16 示例 4: 输入:[[1,1,1],[1,0,1],[1,1,1]] 输出:32 示例 5: 输入:[[2,2,2],[2,1,2],[2,2,2]] 输出:46

下面是解法:

  const surfaceArea = (grid) => {
    // 首先算出所有立方体各个面的表面积和
    // 第一种:使用for of
    // let result = 0;
    // for (let outSideItem of grid) {
      // for (let inItem of outSideItem) {
        // result += inItem * 6;
        // if (inItem > 1) {
           // result -= (inItem - 1) * 2;
        // }
      // }
    // }
    // 第二种:使用reduce
    let result = grid.reduce((acc,current) => {
      acc += current.reduce((sum,curr) => {
        sum += curr * 6;
        if (curr > 1) {
          sum -= ((curr -1) * 2);
        }
        return sum;
      },0);
      return acc;
    },0);
    // 遍历x轴方向
    for (let i = 0; i < grid.length; i++) {
      for (let j = 0; j < grid[i].length - 1; j++) {
        result -= (grid[i][j] > grid[i][j+1]) ? (grid[i][j+1] * 2) : (grid[i][j] * 2);
      }
    }
    // 遍历y轴方向
    for (let i = 0; i < grid[0].length; i++) {
      for (let j = 0; j < grid.length - 1; j++) {
        result -= (grid[j][i] > grid[j+1][i]) ? (grid[j+1] * 2) : (grid[j][i] * 2);
      }
    }
    return result;
  }
let grid = [[2,2,2],[2,1,2],[2,2,2]];
console.log(surfaceArea(grid)); // 46
guxuerui
版权声明:本站原创文章,由guxuerui于2020年03月31日发表,共计1508字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Loading...