本篇参照大佬博客练习题顺序,代码都是自打的,有些可能不是最优解。
目录
1091. 二进制矩阵中的最短路径
class Solution {
public:
struct node{
int x;
int y;
int s;
};
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
queue<node>q;
vector<int>x;
if(grid.size()==0)
return 0;
for(int j=0;j<grid[0].size();j++)
{
x.push_back(0);
}
vector<vector<int>>vis;
for(int i=0;i<grid.size();i++)
vis.push_back(x);
if(grid[0][0]==1)
return -1;
q.push({0,0,1});
vis[0][0]=1;
int ans=0;
int dx[8][2]={
{0,1},{1,0},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
while(!q.empty())
{
node p=q.front();
q.pop();
if(p.x==grid.size()-1&&p.y==grid[0].size()-1)
return p.s;
for(int i=0;i<8;i++)
{
int xx=p.x+dx[i][0];
int yy=p.y+dx[i][1];
if(xx>=0&&xx<grid.size()&&yy>=0&&yy<grid[0].size()&&vis[xx][yy]==0&&grid[xx][yy]==0)
{
vis[xx][yy]=1;
q.push({xx,yy,p.s+1});
}
}
}
return -1;
}
};
279. 完全平方数
class Solution {
public:
int numSquares(int n) {
int b=n;
while(n%4==0)
{
n/=4;
}
if(n%8==7)
return 4;
n=b;
b=sqrt(n);
if(b*b==n)
return 1;
for(int i=1;i*i<=n;i++)
{
int j=sqrt(n-i*i);
if(j*j+i*i==n)
return 2;
}
return 3;
}
};
127. 单词接龙
class Solution {
pu