封面画师あずーる

twitter:@azure_0608_sub

题目地址 :https://leetcode-cn.com/problems/arranging-coins/

排列硬币

你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。

迭代法非常直观,直接循环减行数即可

func arrangeCoins(n int) int {
    i := 0
    for{
        if n < i {
            return i-1
        }
        n -= i
        i++
    }
}

数学法为高中数学,先求出差为1的等差数列 (x+1)*(x/2)=n的正根,然后输出一个不大于x的整数即可

func arrangeCoins(n int) int {
    return int(math.Trunc((-1+math.Sqrt(float64(8*n+1)))/2))
}
测试
最后更新于 2021-12-18