class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
int numEmpty = 0;
int ans = 0;
while(numBottles > 0)
{
ans += numBottles;
int num = numBottles;
numBottles = (num + numEmpty) / numExchange;
numEmpty = (num + numEmpty) % numExchange;
}
return ans;
}
}
今天的题太简单了。再多做一题。
这道题也不难,分类讨论即可:
对每一个球的落下过程,所在的列位置记为pos,所在的行位置记为row。
1、如果pos=0,grid[row][pos]=-1,则球卡在墙上,输出-1。
2、如果pos=len-1,grid[row][pos]=1,则球卡在墙上,输出-1。
3、如果grid[row][pos]=-1,grid[row-1][pos]=1,则球卡在挡板中间,输出-1。
4、如果grid[row][pos]=1,grid[row+1][pos]=-1,则球卡在挡板中间,输出-1。
5、其他情况,pos变为pos+grid[row][pos],球往下走一层。
代码如下:
class Solution {
public int[] findBall(int[][] grid) {
int colLen = grid[0].length;
int rowLen = grid.length;
int[] ans = new int[colLen];
for(int col = 0;col< colLen;col++)
{
int pos = col;
for(int row = 0;row < rowLen;row++)
{
if(pos == 0)
{
if(grid[row][pos] == -1)
{
pos = -1;
break;
}
}
if(pos == colLen - 1)
{
if(grid[row][pos] == 1)
{
pos = -1;
break;
}
}
if(pos + 1 < colLen)
{
if(grid[row][pos] == 1 && grid[row][pos + 1] == -1)
{
pos = -1;
break;
}
}
if(pos - 1 >= 0)
{
if(grid[row][pos] == -1 && grid[row][pos - 1] == 1)
{
pos = -1;
break;
}
}
pos += grid[row][pos];
}
ans[col] = pos;
}
return ans;
}
}