8.29字节跳动笔试

五子棋完全没有思路啊,,有大佬可以指点迷津吗😂😂#字节跳动#
全部评论
4个方向都判断会暴栈 我两两组合过了60..
1
送花
回复
分享
发布于 2021-08-29 12:01
一题没做出来,第一题过了20,第二题过了60,第三题过了80
1
送花
回复
分享
发布于 2021-08-29 12:03
滴滴
校招火热招聘中
官网直投
直接暴力,遍历每一个为0的点,判断在这个点下棋子 会不会五子连线,连线情况共4*5=20种,手敲20个if就行了
1
送花
回复
分享
发布于 2021-08-29 12:03
不能只判断单一方向,判断每个点的两个相反方向(左右,上下),统计两个相反方向的count和即可。单一方向的话不能判断001101100这种
1
送花
回复
分享
发布于 2021-08-29 11:56
我就每个点都都判断一下左右上下斜方向有没有5个1。但是只过了80
点赞
送花
回复
分享
发布于 2021-08-29 11:50
过了60
点赞
送花
回复
分享
发布于 2021-08-29 12:01
对每一个点进行dfs,当前点记录为1直接返回false,为0则进行搜索。四种搜索方式(1)左右横向搜索(2)上下纵向搜(3)左上右下斜搜(4)左下右上斜搜。搜索过程就是统计1的个数,碰0则立即停止搜索,1的个数大于等于4就说明是可以凑到的五子的,返回true。
点赞
送花
回复
分享
发布于 2021-08-29 12:01
从右上角开始判断每个点,然后只要判断向右,向下,向右下三个方向。 最后在把结果按照行列排序就可以了
点赞
送花
回复
分享
发布于 2021-08-29 12:01
暴力ac,左上加右下,右上加左下,左加右,上加下等于4并且当前等于0,加到答案集合中
点赞
送花
回复
分享
发布于 2021-08-29 12:02
过了60的可能是没有排序🤣
点赞
送花
回复
分享
发布于 2021-08-29 12:02
我感觉不需要dfs,他题目说是一定能连上,我直接记录4个白子的坐标,然后判断四个白子是连上了还是断开,如果连上了就往两头加白子(这里判断一下有没有撞边界),如果中间断开了就把最后一个白子点在中间断开的位置。 我这样写也没有记录棋盘,只要记录四个白子的坐标,然后通过白子坐标直接判断是横着摆的还是竖着,或是斜着。 但是我没写完,一直显示段错误……😅
点赞
送花
回复
分享
发布于 2021-08-29 13:32
不要深搜,直接每个位置判断上下左右斜就行了,N<=10,复杂度不会高,纯代码量大一点的题
点赞
送花
回复
分享
发布于 2021-08-29 16:51
package Com.gg; import java.util.*; public class Glass { public static void main(String[] args) { int n = 6; int[][] arr = new int[][] { {0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1}, {1, 1, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1}, {0, 1, 0, 0, 0, 1}, {0, 1, 0, 1, 0, 1} }; int[][] res = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j < n - 4 && arr[i][j + 4] + arr[i][j + 3] + arr[i][j] + arr[i][j + 1] + arr[i][j + 2] == 4) { for (int k = j; k < j + 5; k++) { if (arr[i][k] == 0) { res[i][k] = 1; } } } if (i < n - 4 && arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 3][j] + arr[i + 4][j] == 4) { for (int k = i; k < i + 5; k++) { if (arr[k][j] == 0) { res[k][j] = 1; } } } if (i < n - 5 && j < n - 5 && arr[i][j] + arr[i + 1][j + 1] + arr[i + 2][j + 2] + arr[i + 3][j + 3] + arr[i + 4][j + 4] == 4) { for (int k = 0; k < 4; k++) { if (arr[i + k][j + k] == 0) { res[i + k][j + k] = 1; } } } if (i < n - 5 && j > 3 && arr[i][j] + arr[i + 1][j - 1] + arr[i + 2][j - 2] + arr[i + 3][j - 3] + arr[i + 4][j - 4] == 4) { for (int k = 0; k < 4; k++) { if (arr[i + k][j - k] == 0) { res[i + k][j - k] = 1; } } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (res[i][j] == 1) { System.out.println(i + " " + j); } } } } }
点赞
送花
回复
分享
发布于 2021-08-31 05:23

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务