【笔试强训】Day4 --- Fibonacci数列 + 单词搜索 + 杨辉三角

1. Fibonacci数列

【链接】:Fibonacci数列
在这里插入图片描述
解题思路:简单模拟题,要最少的步数就是找离N最近的Fibonacci数,即可能情况只有比他小的最大的那个Fibonacci数以及比他大的最小的那个Fibonacci数。两者求与其差值的绝对值最小的即可。

#include <iostream>
#include <climits>

using namespace std;

int main()
{
    int n, ret = INT_MAX;
    cin >> n;

    int a = 0, b = 1;
    while (b < n)
    {
        ret = min(ret, n - b);
        int tmp = a + b;
        a = b, b = tmp;
    }
    ret = min(ret, b - n);
    cout << ret << endl;
    return 0;
}

2. 单词搜索

【链接】:单词搜索
在这里插入图片描述

解题思路:一眼dfs,暴搜即可

class Solution
{
    int dx[4] = { 0,0,-1,1 };
    int dy[4] = { -1,1,0,0 };
    int m, n;
    bool visit[101][101] = { false };
public:
    bool exist(vector<string>& board, string word) {
        m = board.size(), n = board[0].size();
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (board[i][j] == word[0])
                {
                    visit[i][j] = true;
                    if (dfs(board, i, j, word, 1)) return true;
                    // 回溯 -- 恢复现场
                    visit[i][j] = false;
                }
            }
        }
        return false;
    }

    bool dfs(vector<string>& board, int i, int j, string word, int pos)
    {
        if (pos == word.size()) return true;

        for (int k = 0; k < 4; k++)
        {
            int x = i + dx[k], y = j + dy[k];
            if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == word[pos] && !visit[x][y])
            {
                visit[x][y] = true;
                if (dfs(board, x, y, word, pos + 1)) return true;
                visit[x][y] = false; // 恢复现场
            }
        }
        return false;
    }
};

3. 杨辉三角

【链接】:杨辉三角
在这里插入图片描述
解题思路:最基础的 dp 模型。利用vector建二维数组,数组元素初始化为1,然后从第三行开始填数即可,只需掌握递推关系dp[i][j] = dp[i-1][j-1]+dp[i-1][j] 即可。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<vector<int>> ret(n);
    // 初始化
    for (int i = 0; i < n; i++) ret[i].resize(i + 1, 1);

    // 填入杨辉三角
    for (int i = 2; i < n; i++)
    {
        for (int j = 1; j < i; j++)
        {
            ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
        }
    }

    for (auto& vec : ret)
    {
        for (auto& x : vec)
        {
            printf("%5d", x);
        }
        cout << endl;
    }
    return 0;
}

相关推荐

  1. 笔试刷题」:三角

    2024-04-28 14:58:02       11 阅读
  2. 三角

    2024-04-28 14:58:02       39 阅读
  3. 三角(Python)

    2024-04-28 14:58:02       39 阅读
  4. leetcode-三角

    2024-04-28 14:58:02       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 14:58:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 14:58:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 14:58:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 14:58:02       18 阅读

热门阅读

  1. 华企盾的面试流程,华企盾招聘流程

    2024-04-28 14:58:02       13 阅读
  2. 2024.4.27每日一题

    2024-04-28 14:58:02       13 阅读
  3. day04--react中state的简化

    2024-04-28 14:58:02       13 阅读
  4. axios下载接口后端返回了json但前端得到的是blob

    2024-04-28 14:58:02       11 阅读
  5. LeetCode //C - 18. 4Sum

    2024-04-28 14:58:02       11 阅读
  6. 2023-2024年AI+跨境电商行业报告合集(精选47份)

    2024-04-28 14:58:02       12 阅读
  7. Kafka

    2024-04-28 14:58:02       10 阅读
  8. MySQL数据库中Delete语句和Truncate table 语句的区别

    2024-04-28 14:58:02       12 阅读
  9. vue+vue-qr生成带logo的二维码并自动下载

    2024-04-28 14:58:02       11 阅读
  10. JDK安装

    2024-04-28 14:58:02       9 阅读