zl程序教程

您现在的位置是:首页 >  后端

当前栏目

力扣——883. 三维形体投影面积(Java、JavaScript、C实现)

JAVAJavaScript 实现 力扣 三维 面积 投影
2023-09-14 09:05:31 时间
  1. 三维形体投影面积
    在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。

每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。

现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。

投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。

返回 所有三个投影的总面积 。

示例 1:
在这里插入图片描述

输入:[[1,2],[3,4]]
输出:17
解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。


示例 2:

输入:grid = [[2]]
输出:5


示例 3:

输入:[[1,0],[0,2]]
输出:8


在这里插入图片描述


Java代码1:

class Solution {
    public int projectionArea(int[][] grid) {
        int n = grid.length;
        int xyArea = 0, yzArea = 0, zxArea = 0;
        for (int i = 0; i < n; i++) {
            int yzHeight = 0, zxHeight = 0;
            for (int j = 0; j < n; j++) {
                xyArea += grid[i][j] > 0 ? 1 : 0;
                yzHeight = Math.max(yzHeight, grid[j][i]);
                zxHeight = Math.max(zxHeight, grid[i][j]);
            }
            yzArea += yzHeight;
            zxArea += zxHeight;
        }
        return xyArea + yzArea + zxArea;
    }
}

在这里插入图片描述


Java代码2:

class Solution {
    public int projectionArea(int[][] grid) {
        int xy = 0, xz = 0, yz = 0;
        for(int[] g: grid) {
            int m = 0;
            for(int v: g) {
                m = Math.max(m, v);
                if(v > 0)
                    xy++;
            }
            xz += m;
        }
        for(int col = 0; col < grid[0].length; col++) {
            int m = 0;
            for(int row = 0; row < grid.length; row++)
                m = Math.max(m, grid[row][col]);
            yz += m;
        }
        return xy + xz + yz;
    }
}

在这里插入图片描述


JavaScript代码:

/**
 * @param {number[][]} grid
 * @return {number}
 */
var projectionArea = function(grid) {
    let ans = 0
    const n = grid.length
    for (let i = 0; i < n; i ++) {
        let max1 = 0
        let max2 = 0
        for (let j = 0; j < n; j ++) {
            if (grid[i][j] > 0) {
                ans ++
            }
            max1 = Math.max(max1, grid[i][j])
            max2 = Math.max(max2, grid[j][i])
        }
        ans += max1
        ans += max2
    }
    return ans
};

在这里插入图片描述


C代码:

int projectionArea(int** grid, int gridSize, int* gridColSize){
    int sum=0;
    int colNum=0;
    for(int i=0;i<gridSize;i++){
        colNum=fmax(colNum,gridColSize[i]);
    }
    int rowmax;
    for(int i=0;i<gridSize;i++ ){
        rowmax=0;
        for(int j=0;j<gridColSize[i];j++){
            if(grid[i][j]!=0){
                rowmax=fmax(rowmax,grid[i][j]);
                sum++;
            }
        }
        sum+=rowmax;
    }
    for(int i=0;i<colNum;i++ ){
        rowmax=0;
        for(int j=0;j<gridSize;j++){
            if(gridColSize[j]>i){
                rowmax=fmax(rowmax,grid[j][i]);
            }
        }
        sum+=rowmax;
    }
    return sum;
}

在这里插入图片描述


作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习