点进来你就是我的人了
博主主页:戳一戳,欢迎大佬指点!
人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!欢迎志同道合的朋友一起加油喔
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心
解题思路:
1.符号位: 两种情况,即 ''+'' , ''-'' ,;新建一个变量保存符号位,返回前判断正负即可。
2.非数字字符: 遇到非数字的字符时,直接立即返回0。
3.数字字符:
字符转数字: “此数字的 ASCII 码” 与 “ 000 的 ASCII 码” 相减即可;
数字拼接: 若从左向右遍历数字,设当前位字符为 c,当前位数字为 x ,数字结果为 res ,则数字拼接公式为:
此题并没有规定数字边界,拓展对于数字越界的处理
题目指出 环境只能存储 32 位大小的有符号整数 ,因此判断数字越界时,要始终保持 res在 int 类型的取值范围内。
public class Solution {
public int StrToInt(String str) {
if (str == null || str.isEmpty()) {
return 0;
}
int len = str.length();
int i = 0;
int flag =
1; //定义一个标志位表示这个数的是正还是负,默认1位正,-1位负
int res = 0;
// int boundary = Integer.MAX_VALUE / 10;
// while (str.charAt(i) == ' ') {
// if (++i == len) {
// return 0;
// }
// }
if (str.charAt(i) == '-') {
flag = -flag;
}
if (str.charAt(i) == '+' || str.charAt(i) == '-') {
i++;
}
for (; i < len; i++) {
char ch = str.charAt(i);
//如果不是数字字符就返回0
if (ch < '0' || ch > '9') {
return 0;
} else {
int x = ch - '0'; //每次获取到的数字
//如果给定了数值范围这样处理
// if (sum > boundary || sum == boundary && ch > '7') {
// return flag == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
// }
res = res * 10 + x;
}
}
return res * flag;
}
}
解题思路:注意这道题的描述稍微有点问题,网格的行坐标是0~(W-1),而网格的列坐标是0~(H-1)
由上面分析我们不难发现,当x1=x2的时候,y1=y2+2,由于每个格子只能放一块蛋糕,(x1,y1)这个坐标放了蛋糕了 ,(x2,y2+2)这个位置就不能再放了,y1=y2同理
此时我们把网格想象成一个二维数组,于是可以利用数组,由于数组每个元素默认为0,我们可以把每个不可以放当蛋糕的位置置为-11,然后在遍历后面的元素,值为0的表示可以放蛋糕,为了防止越界,我们可以加if条件语句加以限制,具体代码如下:
public class Main
{
public static void main (String[] args)
{
Scanner s = new Scanner(System.in);
while (s.hasNext())
{
int w = s.nextInt();
int h = s.nextInt();
int count = 0;
int[][] arr = new int[w][h];//数组值默认为0
for (int i=0; i