一道简单的算法题 -立方体堆叠计算面积-容斥原理(js/golang实现)

本文通过一道算法题介绍了如何利用容斥原理计算立方体堆叠后的表面积。文章提供了JavaScript和Golang两种语言的实现,并分析了不同语言在运行效率上的差异。
摘要由CSDN通过智能技术生成

一道简单的算法题 -立方体堆叠计算面积-容斥原理(js/golang实现)

刷了一下算法题,分别用js和golang实现了一遍,比较简单的容斥问题

题目

在长度为N的正方形网格上, 堆叠立方体,计算堆叠后整个物体的表面积?

用例

//输入
[
	[1, 2, 3],
	[1, 0, 0],
	[1, 0, 1]
]
//输出

解题思路

容斥原理:(引用百度)
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。

因为整个物体形成的形状的有很多种可能性,所以直接计算并不方便

这时候我们直接用容斥原理,首先n个立方体纵向堆叠起来的面积是 n * 4 + 2,而整个物体需要减去的面积就是侧边重叠的部分,为嘛不重复计算,每个柱体只计算南面和西面重叠部分,只要和相邻的柱体比较高度,较低的柱体高度 * 2就是重叠面积, 去掉之后就是整个物体的面积

代码实现

javascript
/**
 * @param {number[][]} grid
 * @return {number}
 */
var surfaceArea = function(grid) {
   
    let area = 0;
    const N = grid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值