雙周賽92。聽說很多人都被egde case搞到,難得我有思慮周全,給自己一個鼓勵。

題目

一個圓形的有效切割必須是:

  • 與邊上兩點及圓心形成的直線
  • 或 由邊上一點與圓心連成的直線

輸入整數n,求最少需要幾次切割才能將圓分成n等分。

解法

從最小的方案數開始往上窮舉,1等分不用切、2等分切1刀,這兩個都是n-1。
再來看3等分要切3刀、4等分切2刀、5等5刀、6等3刀等,開始以此規律循環,得到規律:奇數需要n刀;偶數則需要n/2刀。

時空間都是O(1)。

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