2021-07-11
算法:
放在实验室,明天上传
第五十六场双周赛
一共有四道题
- 统计平方和三元组的数目
- 迷宫中离入口最近的出口
- 求和游戏
- 规定时间内到达终点的最小花费
1、统计平方和三元组的数目
一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 a,b 和 c 。
给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。
示例 1:
输入:n = 5
输出:2
解释:平方和三元组为 (3,4,5) 和 (4,3,5) 。
示例 2:
输入:n = 10
输出:4
解释:平方和三元组为 (3,4,5),(4,3,5),(6,8,10) 和 (8,6,10) 。
提示:
1 <= n <= 250
本题只需要枚举就行了
class Solution {
public int countTriples(int n) {
int cnt = 0;
for(int i = 1; i < n;i++) {
for(int j = i + 1; j < n;j++) {
for(int k = j + 1;k <= n;k++) {
if(i*i + j*j == k*k) {
cnt++;
}
}
}
}
return cnt*2;
}
}
2、迷宫中离入口最近的出口
给你一个 m x n
的迷宫矩阵 maze
(下标从 0 开始),矩阵中有空格子(用 '.'
表示)和墙(用 '+'
表示)。同时给你迷宫的入口 entrance
,用 entrance = [entrancerow, entrancecol]
表示你一开始所在格子的行和列。
每一步操作,你可以往 上,下,左 或者 右 移动一个格子。你不能进入墙所在的格子,你也不能离开迷宫。你的目标是找到离 entrance
最近 的出口。出口 的含义是 maze
边界 上的 空格子。entrance
格子 不算 出口。
请你返回从 entrance
到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1
。
示例 1:
输入:maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
输出:1
解释:总共有 3 个出口,分别位于 (1,0),(0,2) 和 (2,3) 。
一开始,你在入口格子 (1,2) 处。
- 你可以往左移动 2 步到达 (1,0) 。
- 你可以往上移动 1 步到达 (0,2) 。
从入口处没法到达 (2,3) 。
所以,最近的出口是 (0,2) ,距离为 1 步。
示例 2:
输入:maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
输出:2
解释:迷宫中只有 1 个出口,在 (1,2) 处。
(1,0) 不算出口,因为它是入口格子。
初始时,你在入口与格子 (1,0) 处。
- 你可以往右移动 2 步到达 (1,2) 处。
所以,最近的出口为 (1,2) ,距离为 2 步。
示例 3:
输入:maze = [[".","+"]], entrance = [0,0]
输出:-1
解释:这个迷宫中没有出口。
提示:
maze.length == m
maze[i].length == n
1 <= m, n <= 100
-
maze[i][j]
要么是'.'
,要么是'+'
。 entrance.length == 2
0 <= entrancerow < m
0 <= entrancecol < n
-
entrance
一定是空格子。
一个常规的模板题(虽然我做了半个小时。。。)
class Solution {
int[] station_x = {1,0,-1,0};
int[] station_y = {0,-1,0,1};
Queue<Pos> que = new LinkedList();
int N = 105;
char[][] a ;
public int nearestExit(char[][] maze, int[] entrance) {
a = maze;
bfs(entrance[0],entrance[1]);
if(q == Integer.MAX_VALUE) return -1;
else
return q;
}
int q = Integer.MAX_VALUE;
public void bfs(int x,int y) {
que.add(new Pos(x,y,0));
a[x][y] = '+';
int tx,ty,tstep;
int step = 0;
while(!que.isEmpty()) {
x = que.peek().x;
y = que.peek().y;
step = que.peek().step;
que.poll();
for(int i = 0; i < 4;i++) {
tx = x + station_x[i];
ty = y + station_y[i];
tstep = step + 1;
if(tx < 0 || ty < 0 || tx >= a.length || ty >= a[0].length)
continue;
if(a[tx][ty] == '+')
continue;
if((tx == 0 || tx == a.length - 1) && ty >= 0 && ty < a[0].length && a[tx][ty] == '.') {
q = Math.min(q, tstep);
continue;
}
if((ty == 0 || ty == a[0].length - 1) && tx >= 0 && tx < a.length && a[tx][ty] == '.') {
q = Math.min(q, tstep);
continue;
}
a[tx][ty] = '+';
que.add(new Pos(tx,ty,tstep));
}
}
}
}
class Pos{
int x;
int y;
int step;
public Pos(int x,int y,int step) {
this.x = x;
this.y = y;
this.step = step;
}
}
3、求和游戏(不用说,还不会做)
4、规定时间内到达终点的最小花费(不用说,还不会做)
springboot+vue
这周稍微学习了如何构建一个框架
由于图片原因,导致写到博客的图片都上传不上去。。。有时间再上传把