开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
题目描述
圆内一个 有效切割 ,符合以下二者之一:
- 该切割是两个端点在圆上的线段,且该线段经过圆心。
- 该切割是一端在圆心另一端在圆上的线段。
一些有效和无效的切割如下图所示。
给你一个整数 n ,请你返回将圆切割成相等的 n 等分的 最少 切割次数。
示例 1:
输入: n = 4
输出: 2
解释:
上图展示了切割圆 2 次,得到四等分。
示例 2:
输入: n = 3
输出: 3
解释:
最少需要切割 3 次,将圆切成三等分。
少于 3 次切割无法将圆切成大小相等面积相同的 3 等分。
同时可以观察到,第一次切割无法将圆切割开。
提示:
1 <= n <= 100
题意分析
题目会给我们一个整数n,我们需要计算将圆切成n等分的最少需要切割次数。我们可以分类讨论一下:
- 1、一等分
完整的圆本身就是一个一等分的圆,所以切割次数为0;
- 2、偶数等分
我们都知道一条直线可以将区域面积一分为二,因为圆是对称的,每一块扇形都有对称的扇形,所以一条直线可以将圆划分为n * 2块,所以只需要切割 n/2 次;
- 3、奇数等分
奇数等分时,要使切割的每一份都是等分的,我们应该要采用第二种切割方法,这时候切割的区域没有对称性,且一根线段无法将圆切割成两份,要想将圆切割为n份,我们应该要切割n次。
完整代码如下:
AC代码
/**
* @param {number} n
* @return {number}
*/
var numberOfCuts = function(n) {
if(n == 1) return 0;
if(n % 2 == 1) return n;
return n / 2;
};
说在最后
本人为算法业余爱好者,如果上面分享有错误的地方,欢迎指出,感激不尽。