笔试强训Day4 基础算法 DFS

Fibonacci数列

题目链接:Fibonacci数列_牛客题霸_牛客网 (nowcoder.com)

思路:数据范围比较水,n < 1百万 直接数组预处理 前40项斐波那契数 再进行比较 取两相邻元素与n差值的最小值即可。

AC code:

#include<iostream>
#include<cmath>
using namespace std;
const int N = 40;
int a[N] = {0,1};
int n;
int main()
{
    cin >> n;
    for(int i = 2; i <= 39; i ++)
        a[i] = a[i - 1] + a[i - 2];

    int i = 0;
    for(i = 0; i <= 39; i ++)
        if(n < a[i])
            break;
    cout << min(abs(a[i] - n), abs(a[i - 1] - n)) << endl;

    return 0;
}

NC242 单词搜索

题目链接:单词搜索_牛客题霸_牛客网 (nowcoder.com)

思路:遍历数组 如果数组元素==word开头元素 进行深搜 模板题目。

AC code:

#include <string>
class Solution {
public:

    bool exist(vector<string>& board, string word) 
    {
        int m=board.size();
        if(m<= 0) return false;
        int n=board[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if (dfs(0,board,word,i,j)) {
                    return true;
                }
            }
        }
        return false;

    }
    bool dfs(int cur,vector<string>& board, string word,int i,int j)
    {
        if (cur==word.length()) return true;
        if (i>=0&&i<board.size()&&j>=0&&j<=board[0].size()&&board[i][j]==word[cur]) {
            char temp=board[i][j];
            board[i][j]=0;
            if(dfs(cur+1,board,word,i-1,j)) return true;
            if(dfs(cur+1,board,word,i,j+1)) return true;
            if(dfs(cur+1,board,word,i+1,j)) return true;
            if(dfs(cur+1,board,word,i,j-1)) return true;
            board[i][j]=temp;
        }
        return false;
    }
};

BC140 杨辉三角

题目链接:杨辉三角_牛客题霸_牛客网 (nowcoder.com)

思路:每个元素 等于它上一行上一列的元素 与 上一行同一列元素 的和,为了防止越界直接用(1,1) 作为第一个元素,预先将(0,0)设为一即可。

AC code:

#include <iostream>
#include<iomanip>
using namespace std;
const int N = 1010;
int a[N][N];
int n;
int main() 
{
    cin >> n;
    a[0][0] = 1;
    for(int i = 1; i <= n ;i ++)
        for(int j = 1; j <= i; j ++)
            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
    
    for(int i = 1; i <= n ;i ++)
        {
            for(int j = 1; j <= i; j ++)
            cout << setw(5) << a[i][j]; 
            cout << endl;
        }
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值