排列硬币-基于Go

总共有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)
}

posted @ 2021-04-07 21:48  pangqianjin  阅读(61)  评论(0编辑  收藏  举报