leetcode279.完全平方数
和零钱兑换一样,只不过硬币是j*j<n算出来的
var memo []int
func numSquares(n int) int {
coins:=make([]int,0)
for j:=1;j*j<=n;j++{
coins=append(coins,j*j)
}
memo=make([]int,n+1)
for k,_:=range memo{
memo[k]=6
}
return dp(coins,n)
}
func dp(coins []int,amount int) int{
if amount==0{
return 0
}
if amount<0{
return -1
}
if memo[amount]!=6{
return memo[amount]
}
res:=math.MaxInt
for _,v:=range coins{
sub:=dp(coins,amount-v)
if sub==-1{
continue
}
res=min(res,sub+1)
if res!=math.MaxInt{
memo[amount]=res
}else{
memo[amount]=-1
}
}
return memo[amount]
}
func min(x,y int) int{
if x>y{
return y
}
return x
}
Last updated