LeetCode2481-分割圆的最少切割

题目链接

https://leetcode.cn/problems/minimum-cuts-to-divide-a-circle/

解答过程

这个题目有点意思,我觉得是一个不错的思维题。

那么按照题目要求的将一个圆n等分,至少需要的cut数是多少呢?将一个圆n等分的结果是以圆心为顶点的n个角,每个角大小一样。每个角两条边,但是相邻的两个角共用一条边,所以将一个圆n等分,n条边肯定是够了,也就是n个cut。这个题目的关键就在于,这n个半长的cut中如果有2条可以连成1条全长的cut,就等于减小了一个cut,也就是说可能不需要n条边那么多就能将一个圆n等分。

那么什么情况下可以2条半长的cut连成1条全长的cut,从而减小cut数呢?这个地方我一开始陷入了一个错误的思路,我的直觉是需要考虑n等分后1个角的大小是否能整除180度,比如,将一个圆6等分,6条半长的cut肯定够了,但是180/60=3,所以只需要3条全长的cut就够了。然后我就提交了一版答案,先判断n是否能整除360,能整除的,再计算一个角的大小,再判断一个角的大小能否整除180。结果题目判定失败,错误示例,14等分需要的最小cut数是7,而不是14。

然后我就陷入了迷惑,14不能整除360,14等分后的一个角的大小也不能整除180,怎么会有能连成全长cut的呢?再稍作思考,才发现问题所在。关键不在于是不是能整除180,即便14等分的一个角不能整除180,但无论如何,14等分的一半是不是半圆?既然是半圆,那么显然任意连续的七个14等分角就都是半圆,所以最小cut数是7,而不是14。由此可推,是否能将2个半长的cut连成1个全长的cut,只取决于n是否能被2整除,只要能被2整除,那么就可以减半cut数。所以,答案其实很简单,判断n是否能被2整除,能整除的需要n/2个cut,不能整除的需要n个cut。

	public int numberOfCuts(int n) {
		if (n == 1) {
			return 0;
		}

		if (n % 2 == 0) {
			return n / 2;
		} else {
			return n;
		}
	}

为什么我一开始会陷入认为需要考虑单角能否整除180的错误里呢?归根结底我觉得是对无理数、对数的连续性缺乏认知。由此我还想到数学史上的一桩轶事,就是如何只用直尺和圆规将一个圆17等分。据说这是伟大的数学家高斯错拿了老师的研究题目,而花了一夜时间解决了这个问题,第二天和老师抱怨昨天的题目太难了,老师看了以后惊掉下巴…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值