LeetCode 2481. 分割圆的最少切割次数

【LetMeFly】2481.分割圆的最少切割次数

力扣题目链接:https://leetcode.cn/problems/minimum-cuts-to-divide-a-circle/

圆内一个 有效切割 ,符合以下二者之一:

  • 该切割是两个端点在圆上的线段,且该线段经过圆心。
  • 该切割是一端在圆心另一端在圆上的线段。

一些有效和无效的切割如下图所示。

LeetCode 2481. 分割圆的最少切割次数_第1张图片

给你一个整数 n ,请你返回将圆切割成相等的 n 等分的 最少 切割次数。

 

示例 1:

LeetCode 2481. 分割圆的最少切割次数_第2张图片

输入:n = 4
输出:2
解释:
上图展示了切割圆 2 次,得到四等分。

示例 2:

LeetCode 2481. 分割圆的最少切割次数_第3张图片

输入:n = 3
输出:3
解释:
最少需要切割 3 次,将圆切成三等分。
少于 3 次切割无法将圆切成大小相等面积相同的 3 等分。
同时可以观察到,第一次切割无法将圆切割开。

 

提示:

  • 1 <= n <= 100

方法一:几何

这道题意思是:最少使用几条直径/半径,能把圆 n n n等分。

其实分为两种情况考虑即可:

  • 如果 n n n是偶数,我们使用直径分割,每多一条直径,所分成的块数 + 2 +2 +2
  • 如果 n n n是奇数,那么无法使用直径分割(否则无法做到等分),每多一条半径,所分成的块数 12 12 12

特别的: 如果要把圆分成1块,那么使用一条半径分割没有意义(因此返回 0 0 0

  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++

class Solution {
public:
    int numberOfCuts(int n) {
        if (n == 1) {
            return 0;
        }
        return n % 2 ? n : n / 2;
    }
};

Python

class Solution:
    def numberOfCuts(self, n: int) -> int:
        if n == 1:
            return 0
        return n if n % 2 else n // 2

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/131257304

你可能感兴趣的:(题解,#,力扣LeetCode,leetcode,算法,题解,圆,几何)