今天是第99道题。你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币,返回k。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
题目:你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。给定一个数字 n,找出可形成完整阶梯行的总行数。n 是一个非负整数,并且在32位有符号整型的范围内。
示例 1:
n = 5 硬币可排列成以下几行: ¤ ¤ ¤ ¤ ¤ 因为第三行不完整,所以返回2.示例 2:
n = 8 硬币可排列成以下几行: ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ 因为第四行不完整,所以返回3.
解法1。根据求根公式解就行了,代码如下
执行用时: 40 ms, 在Arranging Coins的Python提交中击败了96.13% 的用户
class Solution(object):
def arrangeCoins(self, n):
"""
:type n: int
:rtype: int
"""
import math
return int((-1+math.sqrt(1+8*n))/2)
解法2。下面这种解法是LeetCode效率比较靠前的做法,但我没搞懂是啥逻辑。。。
执行用时: 40 ms, 在Arranging Coins的Python提交中击败了96.13% 的用户
class Solution(object):
def arrangeCoins(self, n):
"""
:type n: int
:rtype: int
"""
if n == 0 :
return 0
k = int((2*n)**0.5)
if k+k**2 <= 2*n:
return k
if k+k**2 > 2*n:
return k-1
解法1:原创