每日一题(day6)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


俩到经典题目

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、不要二

题目描述

在这里插入图片描述

解题分析

这其实是一个数学问题:
简化题目条件可知: (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ==4,都是整数
有如下四种情况:
1+3=4 (y1-y2)*(y1-y2)不可能等于3
3+1=4 (x1-x2)*(x1-x2)不可能等于3
2+2=4 (y1-y2)(y1-y2)不可能等于2 , (x1-x2)(x1-x2)不可能等于2
0+4=4
4+0=4
得知满足的条件有俩个分别
(x1-x2)(x1-x2)=0 ,(y1-y2)(y1-y2)=4
(x1-x2)(x1-x2)=4 ,(y1-y2)
(y1-y2)=0

最终结论:

x1=x2 ,y1-y2=2或者y1=y2,x1-x2=2;
我们定义一个二维数组,初始化为0,将不满足条件的格子,置为1,统计为0的格子。注意当遍历到为值1的位置时,应该直接跳过格子,不能再进行判定修改。
在这里插入图片描述

代码演示

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int w = scanner.nextInt();
        int h = scanner.nextInt();
        int[][]array = new int[w][h];
        int count = 0;
        for (int i = 0; i < w; i++) {
            for (int j = 0; j < h; j++) {
                if (array[i][j] == 0) {
                    count++;
                  if (i + 2 < w) {
                    array[i + 2][j] = 1;
                }
                  if (j + 2 < h) {
                    array[i][j + 2] = 1;
                  }
               }
            }
        }
        System.out.println(count);
    }
}

二、字符串转成整数

题目描述

在这里插入图片描述

解题分析

输入的有三种可能性+…,-…,有非法字符
如果是+,-需要记录下来,并再最后的结果做出相应的运算变成正数(正负号处理
非法的数字返回0(非法字符
题目说输入的结果可能为空,要对str判空处理(空字符串

核心逻辑

合法的字符串变成整型公式:sum=sum*10+str[i]-‘0’
在这里插入图片描述

代码演示

按照如上思路

第一次提交代码
public class Solution {
    public int StrToInt(String str) {
        if (str == null || str.length() == 0) {
            return 0;
        }
        int flag = 1;
        if (str.charAt(0) == '-') {
            flag = -1;
        }
        if (str.charAt(0) == '+') {
            flag = 1;
        }
        int sum = 0;
        for (int i = 0; i < str.length() ; i++) {
            //判断是否是合法字符
            if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                sum = 0; //题干说非法返回0
                break;
            }
            sum = sum * 10 + str.charAt(i) - '0';
        }
        return sum * flag;
    }
}

在这里插入图片描述

bug分析

+,-操作事实上也是合法操作,不能直接break,并返回0,
最开始这样改的:
在这里插入图片描述

修改第一个字符为0,就可以进入循环,当i为0的时候,不影响sum的判定,i++,后续操作正常
但是string是被final修饰的,不能通过charat(i)来改变字符串
这里就需要用到数组的存储了

第二次提交代码
 public int StrToInt(String str) {
        char chs[] = str.toCharArray();
        if (chs == null || chs.length == 0) {
            return 0;
        }
        int flag = 1;
        if (str.charAt(0) == '-') {
            flag = -1;
            chs[0] = '0'; //注意这里一定是字符0,才能不影响sum的值

        }
        if (str.charAt(0) == '+') {
            flag = 1;
            chs[0] = '0'; //注意这里一定是字符0,才能不影响sum的值
        }
        int sum = 0;
        for (int i = 0; i < str.length() ; i++) {
            //判断是否是合法字符
            if (chs[i] < '0' || chs[i] > '9') {
                sum = 0; //题干说非法返回0
                break;
            }
            sum = sum * 10 + chs[i] - '0';
        }
        return sum * flag;
    }

字符串变整型

字符串转换成整型核心逻辑:sum=sum10+str[i]-‘0’*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值