题目链接:https://leetcode-cn.com/problems/where-will-the-ball-fall/
前言:很久没写过java代码了,每次刷题都要看很多博客查基础的函数,希望尽快掌握这些。
一. java学习
1.数组定义方式
/*长度为n的一维数组*/ int[] a = new int[n]; /*已知的二维数组*/ int[][] grid = new int[][]{{1,1,-1,-1,1},{1,1,1,1,-1}};
2.获取二维数组行列数
int m = grid.length; int n = grid[0].length;
3.输出数组
/*a为一维数组*/ for(int b:a) System.out.println(b);
4.填充一维数组
Arrays.fill ( ans, -1 )
二. 题解思路
从左到右,依次判断每个球的最终位置。
对于每一个球,从上至下判断球位置的移动方向。若挡板向右偏,则球会往右移动;若挡板往左偏,则球会往左移动。若移动过程中碰到侧边或者V 形,则球会卡住(输出-1)。如果可以完成本层的移动,则继续判断下一层的移动方向,直到落出箱子或者卡住。
比较特殊的样例是只有一块挡板或只有一行箱子时,可以有效检测代码的边界判断是否有问题。
三. 心得
代码写了一上午,改了又改,思路其实是很容易想到的,但判断侧边和V形时代码写得比较繁琐,导致了多个if顺序上的问题。为保持代码的简洁性,还需要更多的练习。