【lc】441. 排列硬币
链接
https://leetcode.cn/problems/arranging-coins/description/
问题分析
这题看数据规模,遍历肯定搞不定。
看数据规律,我们优先考虑二分。
然后单拎出来一个函数用来计算求和即可。
其中,二分如果不好判断边界,就假定极限情况(来到了left == right的情况),看看最后你要的值是left还是right,直接返回即可。
代码
class Solution: def arrangeCoins(self, n: int) -> int: if n < 2: return n left, right = 1, n while left <= right: mid = (left + right) >> 1 if self.cal(mid) < n: left = mid + 1 elif self.cal(mid) == n: return mid else: right = mid - 1 return right def cal(self, n): return (1 + n) * n // 2