欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

441. 排列硬币

程序员文章站 2024-03-16 08:52:28
...

题目链接:https://leetcode-cn.com/problems/arranging-coins/

你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。

给定一个数字 n,找出可形成完整阶梯行的总行数。

n 是一个非负整数,并且在32位有符号整型的范围内。

示例 1:

n = 5

硬币可排列成以下几行:
¤
¤ ¤
¤ ¤

因为第三行不完整,所以返回2.
示例 2:

n = 8

硬币可排列成以下几行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤

因为第四行不完整,所以返回3.

############################

高斯求和公式是:n*(n+1)/2

想到一元二次方程x*(x+1)/2=n,把x求出来就是答案直接返回就可以了,公式是:

一元二次方程求根公式

  • 441. 排列硬币

公式描述:

一元二次方程形式:ax2+bx+c=0(a≠0,且a,b,c是常数)。

代码如下:

class Solution {
    public int arrangeCoins(int n) {
        //1-n的和——n*(n-1)/2——不对,是+
        //return (1+Math.sqrt(1+8n))/2;
        //int i=(int)((Math.pow((1+8*n),0.5)-1)/2);
        //注意不能写8n,是8*n!!!
        int i=(int)(Math.sqrt(2)*Math.sqrt(n+0.125)-0.5);
        return i;
    }
}

也是调了半天才调通,8*n写成8n,还有sqrt里面注意范围,8*n会超过int范围。