分割圆的最少切割次数

420 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
};

说在最后

本人为算法业余爱好者,如果上面分享有错误的地方,欢迎指出,感激不尽。