斐波那契数列

发布于 2023-12-24 09:43:14 字数 2027 浏览 12 评论 0

问题

  • 给定整数 N ,一次可以跨 1 个台阶或者 2 个台阶,请问一共有多少种走法(要求使用对数级别的时间复杂度)

解答

  • 常规思路( F(n) = F(n-1)+F(n-2)
  • 增加一个数组进行存储,动态规划,可以完成 O(n) 的时间复杂度
  • 矩阵计算:就像对 a 的 b 次方的对数级方案
    • 对于为什么 2*result[0][0]+result[1][0] ,可以进一步考虑 N = 3 的场景
    • base 数组根据前 4 个值即可算法
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String mn = scanner.nextLine();
        Integer N = Integer.valueOf(mn);
        int[][] base = {{1,1},{1,0}};
        int[][] result = matrixPower(base,N-2);
        System.out.println(2*result[0][0]+result[1][0]);
        System.out.println(checkResult(N));
    }

    private static int checkResult(Integer n) {
        if (n == 1 || n == 2){
            return n;
        }
        if (n <= 0) return 0;
        return checkResult(n-1) + checkResult(n-2);
    }

    public static int[][] matrixPower(int [][] m, int p){
        int[][] res = new int[m.length][m[0].length];
        for (int i = 0;i < res.length;i ++) {
            res[i][i] = 1;
        }
        int[][] temp = m;
        for (;p != 0;p >>= 1){
            if ((p & 1) != 0){
                res = matrixPower(res,temp);
            }
            temp = matrixPower(temp,temp);
        }
        return res;
    }

    public static int[][] matrixPower(int [][] m1, int[][] m2) {
        int [][] res = new int[m1.length][m2[0].length];
        for (int i = 0; i < m2[0].length; i ++){
            for (int j = 0; j < m1.length; j ++){
                for (int k = 0; k < m2.length; k ++){
                    res[i][j] += m1[i][k] * m2[k][j];
                }
            }
        }
        return res;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

13886483628

文章 0 评论 0

流年已逝

文章 0 评论 0

℡寂寞咖啡

文章 0 评论 0

笑看君怀她人

文章 0 评论 0

wkeithbarry

文章 0 评论 0

素手挽清风

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文