Arranging Coins
阿新 • • 發佈:2018-12-25
You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.
Given n, find the total number of full staircase rows that can be formed.
n is a non-negative integer and fits within the range of a 32-bit signed integer.
Example 1:
n = 5
The coins can form the following rows:
¤
¤ ¤
¤ ¤
Because the 3rd row is incomplete, we return 2.
Example 2:
n = 8
The coins can form the following rows:
¤
¤ ¤
¤ ¤ ¤
¤ ¤
Because the 4th row is incomplete, we return 3.
思路:數學公式,一個個減去,然後count即可,break條件就是remain < i
class Solution { public int arrangeCoins(int n) { if(n <= 0) return 0; int count = 0; int remain = n; for(int i=1; i<=n; i++){ if(remain >= i){ count++; remain -=i; } else { break; } } return count; } }
思路2:用binary search,n*(n+1)/2 來判斷是否大於N;
class Solution { public int arrangeCoins(int n) { int start = 0; int end = n; int mid = 0; while (start <= end) { mid = start +(end-start)/2; if ((0.5 * mid * mid + 0.5 * mid) <= n) { start = mid +1 ; } else { end = mid - 1; } } return start-1; } }