zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 441 排列硬币

    441. 排列硬币

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

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

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

    示例 1:

    n = 5

    硬币可排列成以下几行:

    ¤
    ¤ ¤
    ¤ ¤
    

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

    n = 8

    硬币可排列成以下几行:

    ¤
    ¤ ¤
    ¤ ¤ ¤
    ¤ ¤
    

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

    PS:
    根据数学公式,k(k+1) /2 = n,可以得到其正数解为:k = sqrt(2n+1/4) - 1/2。然后求整即可。
    唯一的问题是,这里2n+1/4有可能会超出sqrt函数的参数范围。
    于是,我们可以变换一下, k = sqrt(2) * sqrt(n+1/8) - 1/2,这样求平方根就不会超限了。
    于是,我们就有了这么一行代码

    class Solution {
        public int arrangeCoins(int n) {
          return (int) (-1 + Math.sqrt(1 + 8 * (long) n)) / 2;
        }
    }
    
    
  • 相关阅读:
    Linux熟悉命令
    Spring boot
    python jdbc操作数据库
    python 获取异常
    EntityFramework6 in github
    Java classloader机制测试命令
    SinalR
    asp.net httpmodule问题
    VMVare虚拟机的异常处理---内部错误
    Oracle11g客户端安装及plsql配置
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946476.html
Copyright © 2011-2022 走看看