Day 4
目录
- 1.Fibonacci数列 (pass)
- 1.1 解析
- 1.2 代码
- 2.单词搜索
- 2.1 解析
- 2.2 代码
- 3.杨辉三角(pass)
- 3.1 解析
- 3.2 代码
1.Fibonacci数列 (pass)
WY22 Fibonacci数列
1.1 解析
1.2 代码
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int a = 0, b = 1, c = a + b;
int len = 1e7;
while(N>c)//向后滚动
{
a=b;
b=c;
c=a+b;
}
len=min(c-N,N-b);//n落在b,c之间
cout << len;
return 0;
}
2.单词搜索
NC242 单词搜索
技能:递归-dfs/bfs
2.1 解析
2.2 代码
class Solution {
public:
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int vis[101][101];
int m,n;
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])//找到第一个字母
{
if(dfs(board,i,j,word,1)) return true;
}
}
}
return false;
}
bool dfs(vector<string>& board,int i,int j,string word,int pos)
{
if(pos==word.size()) return true;//递归出口
vis[i][j]=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&&!vis[x][y]&&board[x][y]==word[pos])
{
if(dfs(board,x,y,word,pos+1)) return true;
}
}
vis[i][j]=false;//恢复现场
return false;
}
};
3.杨辉三角(pass)
杨辉三角
技能:二维dp、数组
3.1 解析
3.2 代码
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n=0;
cin>>n;
vector<vector<int>> dp(n,vector<int>(n,1));//创建dp+初始化
for(int i=2;i<n;i++)
{
for(int j=1;j<i;j++)
dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
}
//打印
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
printf("%5d",dp[i][j]);
printf("\n");
}
return 0;
}