1. 程式人生 > >算法基礎:整數拆分問題(Golang實現)

算法基礎:整數拆分問題(Golang實現)

text else lang mod mark numbers com cti ase

一個整數總能夠拆分為2的冪的和。比如:

7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1

總共同擁有6種不同的拆分方式。
再比方:4能夠拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。


用f(n)表示n的不同拆分的種數,比如f(7)=6.
要求編敲代碼。讀入n(不超過1000000)。輸出f(n)

輸入:一個整數N(1<=N<=1000000)。
輸出:f(n)
輸入數據假設超出範圍,輸出-1。

例子輸入:
7

例子輸出:
6
代碼實現:

package huawei

import (
    "fmt"
)

func Test08Base() {
    input := 1000000
    output := numberSplit(input)
    fmt.Println(output)
}

func numberSplit(n int) int {
    if n < 1 || n > 1000000 {
        return -1
    }

    //1=1,1種拆分方式
    if n == 1 {
        return 1
    }

    //2=2,2=1+1。2種拆分方式
    if
n == 2 { return 2 } //n>=3 //保存已經計算出來的數值 data := make([]int, n+1) data[0] = 0 //該值無意義純占位作用 data[1] = 1 data[2] = 2 for i := 3; i <= n; i++ { if i%2 == 0 { //偶數 data[i] = data[i-2] + data[i/2] } else { //奇數 data[i] = data[i-1
] } } return data[n] }

算法基礎:整數拆分問題(Golang實現)