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
单词搜索_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
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
杨辉三角_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
线性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;
}