343.integer-break.go 397 B

1234567891011121314151617181920212223242526
  1. func integerBreak(n int) int {
  2. if n < 4 {
  3. return n - 1
  4. }
  5. sqrt := int(math.Sqrt(float64(n)))
  6. max := helper(n, sqrt)
  7. for i := sqrt + 1; i < n/2; i++ {
  8. if tmp := helper(n, i); max < tmp {
  9. max = tmp
  10. }
  11. }
  12. return max
  13. }
  14. func helper(n, k int) int {
  15. div, mod, prod := n/k, n%k, 1
  16. for i := 0; i < k; i++ {
  17. if i < mod {
  18. prod *= div + 1
  19. } else {
  20. prod *= div
  21. }
  22. }
  23. return prod
  24. }