010
Fibonacci数列_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
1.创建一个数组fib[],保存范围内的所有斐波那契数,再求离N最近的斐波那契数。
2.创建3个数a,b,c,依次先后滚动,可得出所有的斐波那契数,当N落在b,c之间时,停止滚动,再求N离b,c哪个近。
#include <iostream>
using namespace std;
int n;
int main()
{
cin>>n;
int a=0,b=1,c=1;
while(n>c)
{
a=b;
b=c;
c=a+b;
}
cout<<min(n-b,c-n)<<endl;
return 0;
}
011
题目:
题解:
dfs深度搜索:将每次搜索到的符合条件的坐标i,j以及遍历到的word的下标传入下一层,直到遍历完word。
class Solution {
public:
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int m,n;
bool vis[1001][1001];
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,0)) return true;
}
}
}
return false;
}
bool dfs(vector<string>& board, int i,int j,string& word,int pos)
{
if(pos+1==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+1])
{
if(dfs(board,x,y,word,pos+1)) return true;
}
}
vis[i][j]=false;
return false;
}
};
012
题目:
题解:
线性dp问题:创建一个足够大的二维dp表(多开一个位置从1开始(可避免边界问题)),根据每个数等于它左上方和上方的两数之和,依次填表。填表完再一次打印。
#include <iostream>
using namespace std;
int dp[31][31];
int main()
{
int n=0;
cin>>n;
dp[1][1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i-1][j]+dp[i-1][j-1];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
printf("%5d",dp[i][j]);
}
printf("\n");
}
return 0;
}