You have n
coins and you want to build a staircase with these coins. The staircase consists of k
rows where the i-th
row has exactly i
coins. The last row of the staircase may be incomplete.
Given the integer n
, return the number of complete rows of the staircase you will build.
Example 1:
Input: n = 5
Output: 2
Explanation: Because the 3rd row is incomplete, we return 2.
Example 2:
Input: n = 8
Output: 3
Explanation: Because the 4th row is incomplete, we return 3.
n
is always a non-negative integer.n
be zero?
0
.To determine the number of complete rows that can be built with n
coins, we need to find the maximum k
such that the sum of the first k
natural numbers (i.e., 1 + 2 + ... + k
) is less than or equal to n
.
The sum of the first k
natural numbers is given by the formula:
[ \text{Sum}(k) = \frac{k \cdot (k + 1)}{2} ]
We need to solve the inequality:
[ \frac{k \cdot (k + 1)}{2} \leq n ]
This can be simplified to:
[ k^2 + k \leq 2n ]
Which is a quadratic equation in the form:
[ k^2 + k - 2n = 0 ]
Using the quadratic formula ( k = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} ), where ( a = 1 ), ( b = 1 ), and ( c = -2n ), we get:
[ k = \frac{-1 \pm \sqrt{1 + 8n}}{2} ]
Since k
must be a positive integer, we take the positive root:
[ k = \frac{-1 + \sqrt{1 + 8n}}{2} ]
The largest integer value of k
that satisfies this will be the number of complete rows.
import math
def arrangeCoins(n: int) -> int:
if n == 0:
return 0
# Quadratic formula to solve for k
k = int((-1 + math.isqrt(1 + 8 * n)) // 2)
return k
The time complexity of the above approach is ( O(1) ) because we are performing a constant number of arithmetic operations, including a square root calculation.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?