Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
你总共有
n枚硬币,并计划将它们按阶梯状排列。对于一个由k行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。
示例 1:
输入:n = 5
输出:2
解释:因为第三行不完整,所以返回 2 。
示例 2:
输入:n = 8
输出:3
解释:因为第四行不完整,所以返回 3 。
提示:
- 1 <= n <= 2^31 - 1
二、思路分析:
简单的一元二次方程 假设 最后结果为 k 行
那么 k 行 有 k * (k + 1)/2 个
得到 k * (k + 1)/2 小于等于 n
解 一元二次 方程 k * (k + 1)/2 = n
最后的结果 √(2n + 0.25) - 0.5 然后向下取整就得到了 能支持的最大行数
三、AC 代码:
class Solution {
func arrangeCoins(_ n: Int) -> Int {
return Int(floor(sqrt(CGFloat(2 * n) + 0.25) - 0.5))
}
}
四、总结:
还是数学强大啊