zoukankan      html  css  js  c++  java
  • 算法基础:整数拆分问题(Golang实现)

    一个整数总能够拆分为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]
    }
    
  • 相关阅读:
    JQuery使用总结
    JS应用总结
    Base64数据转成Excel,并处理Excel的格式
    HTTP压缩
    谷歌开发工具解析
    .Net LIst排重
    MySql日志系统
    .Net生成PDF流
    Mysql MVCC
    JAVA期末综合课程设计
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7244122.html
Copyright © 2011-2022 走看看