1.把字符串转换成整数

Java把一个字符串转换成整数 java把字符串变成整数_数字字符


解题思路:

1.符号位: 两种情况,即 ''+'' , ''-'' ,;新建一个变量保存符号位,返回前判断正负即可。

2.非数字字符: 遇到非数字的字符时,直接立即返回0。

3.数字字符:
字符转数字: “此数字的 ASCII 码” 与 “ 000 的 ASCII 码” 相减即可;
数字拼接: 若从左向右遍历数字,设当前位字符为 c,当前位数字为 x ,数字结果为 res ,则数字拼接公式为:

Java把一个字符串转换成整数 java把字符串变成整数_java_02

此题并没有规定数字边界,拓展对于数字越界的处理

Java把一个字符串转换成整数 java把字符串变成整数_开发语言_03

题目指出 环境只能存储 32 位大小的有符号整数 ,因此判断数字越界时,要始终保持 res在 int 类型的取值范围内。

Java把一个字符串转换成整数 java把字符串变成整数_Java把一个字符串转换成整数_04

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;
    }
}

2.不要二

Java把一个字符串转换成整数 java把字符串变成整数_数组_05


解题思路:注意这道题的描述稍微有点问题,网格的行坐标是0~(W-1),而网格的列坐标是0~(H-1)

Java把一个字符串转换成整数 java把字符串变成整数_数字字符_06

Java把一个字符串转换成整数 java把字符串变成整数_Java把一个字符串转换成整数_07

      

Java把一个字符串转换成整数 java把字符串变成整数_数字字符_08

Java把一个字符串转换成整数 java把字符串变成整数_java_09

由上面分析我们不难发现,当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<w; ++i)
            {
                for (int j=0; j<h; ++j)
                {
                    //只有值为0的位置可以放蛋糕
                    if (arr[i][j] == 0)
                    {
                        //count表示可以放的蛋糕数
                        count ++;
                        //加深if判断防止行下标越界
                        if (i+2 < w)
                        {
                            //此处不可以放蛋糕
                            arr[i+2][j] = -1;
                        }
                        //加上if判断防止列下标越界
                        if (j+2 < h)
                        {
                            //此处不可以放蛋糕
                            arr[i][j+2] = -1;
                        }
                    }
                }
            }
            System.out.println(count);
        }
    }
}