【Lintcode】988. Arranging Coins

题目地址:

https://www.lintcode.com/problem/arranging-coins/description

给定 n n n个硬币,要求摆成尽量多的 k k k行,使得尽量第 i i i行恰好有 i i i个硬币( i i i 1 1 1开始计数),问恰好能摆出多少满的行(满的行意思是满足第 j j j行恰好有 j j j个硬币的最大的 j j j,因为有可能最后一行填不满)。

直接模拟即可。代码如下:

public class Solution {
    /**
     * @param n: a non-negative integer
     * @return: the total number of full staircase rows that can be formed
     */
    public int arrangeCoins(int n) {
        // Write your code here
        int sum = 0, i = 1;
        while (true) {
        	// 如果摆满这一行之后硬币总数就大于n了,说明当前行不够了,也即前面行已经满,返回i - 1
            if (sum + i > n) {
                return i - 1;
            }
            
            // 否则摆上当前行
            sum += i;
            i++;
        }
    }
}

时间复杂度 O ( n ) O(\sqrt{n}) O(n ),空间 O ( 1 ) O(1) O(1)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页