的解题思路学习了@Wilson79的解法(这篇文章和他的思路基本一致,只是他的实现是O(n))一句话代码(附最后)难理解,写成多行:classSolution:defcuttingRope(self,n:int)->int:ifn<4:returnn-1ifn%3==0:#allcutinto3return3**(n//3)ifn%3==1:#切掉一个4,其余切为3(或者切两个2,其余切为3)return3**((n-4)//3)*4ifn%3==2:#切一个2,其余切为3return3**((n-2)//3)*2至于为什么会这样,wilson79的题解已经给出了详细的解释,为什么3是最好的,归纳后我再重复一遍攻略:切出长度为1不划算,尽量不要出现1,其实只有当n=2,n=3时会切出1,其余时间不会切1。那么策略就是先切3,但是如果剩下的4个is剩了,就不剪了(因为如果有4个再3个,就剩1个,最好不要剪),如果还剩2个,就没办法剪了。代码类解决方案:defcuttingRope(self,n:int)->int:returnn-1ifn<4else[3**(n//3),3**((n-4)//3)*4,3**(n//3)*2][n%3]欢迎来到我的博客:https://codeplot.top/我的博客分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/
