总共有n枚硬币,排成阶梯形状,满足第K行有K个硬币。
求形成的完整阶梯行的总行数。
例如n=5时,
1
1 1
1 1
此时完整的阶梯行的总行数为2,因为第3行未排满。
n为一个非负整数,且在32位有符号整型的范围内。
- 暴力破解
func arrangeCoins(n int)int{
for i:=1;i<=n;i++{
n -= i
if n<=i{
return i
}
}
return 0//错误情况
}
- 二分查找
func arrangeCoins2(n int)int{
var low = 0
var high = n
for low<=high{
mid := (low+high)/2
cost := (1+mid)*mid/2
if cost==n{
return mid
}else if cost>n{
high = mid-1
}else{
low = mid+1
}
}
return 0
}
- 牛顿迭代
func arrangeCoins3(n int)int{
if n==0{
return 0
}
return int(sqrt(float64(n), float64(n)))
}
func sqrt(x float64, n float64)float64{
res := (x + (2*n-x)/x)/2
if res==x{
return x
}
return sqrt(res, n)
}