LeetCode 441 排列硬币[数学] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 441 排列硬币[数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。



解题思路:
利用等差数列的性质,我们可以轻松得到 k * (k + 1) = 2 * n,那么二分法查找符合条件的k即可,代码如下:

class Solution {
public:
    int arrangeCoins(int n) {
        int left = 1, right = n;
        while(left < right) {
            int mid = (right - left + 1) / 2 + left;
            if((long long)mid * (mid + 1) <= (long long)2 * n) {
                left =mid;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
};

第二种方法就是纯粹的数学方法,利用求根公式轻松解决,代码如下:

class Solution {
public:
    int arrangeCoins(int n) {
        return (sqrt((long long)8 * n + 1) - 1) / 2;
    }
};

以上是关于LeetCode 441 排列硬币[数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 441 排列硬币[数学] HERODING的LeetCode之路

leetcode打卡--441. 排列硬币

leetcode 441. 排列硬币

LeetCode--441--排列硬币

leetcode 441.排列硬币(python)

leetcode 441. 排列硬币(Arranging Coins)