写点什么

把字符串转换成整数与不要二

作者:未见花闻
  • 2022 年 7 月 24 日
  • 本文字数:2241 字

    阅读完需:约 7 分钟

⭐️把字符串转换成整数⭐️

🔐题目详情

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0


数据范围:字符串长度满足 进阶:空间复杂度 O(1) ,时间复杂度 O(n)


注意:


①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0


②字符串中可能出现 +/- 且仅可能出现在字符串首位。


输入描述:


输入一个字符串,包括数字字母符号,可以为空


返回值描述:


如果是合法的数值表达则返回该数字,否则返回 0


示例 1


输入:


"+2147483647"
复制代码


返回值:


2147483647
复制代码


示例 2


输入:


"1a33"
复制代码


返回值:


0
复制代码


题目链接:把字符串转换成整数

💡解题思路

基本思路: 模拟解题思路 1:我们来看看题,它说让我们将字符串转换为整数,并且不能使用库函数,emmm,它说不能用你就不用?我偏要用!所以第一种思路就是使用库函数,这个就不多说了。


解题思路 2:


特殊的一种情况,判断字符串的第一个字符时,如果为-,我们可以设计一个标记isPos表示这个数是不是正数,如果不是,将isPos设置为false,反之为true,如果为+不用处理,如果为其他非数字字符,返回0即可。


对于字符串上其他的字符,直接判断是不是数字,即判断字符的大小是否介于['0', '9']之间,如果不满足,直接返回0

🔑源代码

解题思路 2:


import java.util.*;public class Solution {    public int StrToInt(String str) {        char[] cs = str.toCharArray();        int n = cs.length;        int ans = 0;        boolean isPos = true;                for (int i = 0; i < n; i++) {            char c = cs[i];            if (c > '0' && c < '9') {                ans = ans * 10 + (c - '0');            } else if (i == 0 && c == '-') {                isPos = false;                continue;            } else if (i == 0 && c == '+') {                continue;            } else {                return 0;            }        }        //不是正数        if (!isPos) {            ans = -ans;        }        return ans;    }}
复制代码

🌱总结

本题为字符串模拟题,本质上就是判断一个字符是不是数字。

⭐️不要二⭐️

🔐题目详情

二货小易有一个 W*H 的网格盒子,网格的行编号为 0 ~ H-1,网格的列编号为 0 ~ W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于 2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。


输入描述:


每组数组包含网格长宽 W,H,用空格分割.(1 ≤ W、H ≤ 1000)


输出描述:


输出一个最多可以放的蛋糕数


示例 1


输入:


3 2
复制代码


输出:


4
复制代码


题目链接:不要二

💡解题思路

基本思路: 数学推理


解题思路:


这道题从题面上看,感觉是网易的一道笔试题,不管那么多了,我们来进行分析,任意两块蛋糕的距离不能等于 2,根据题目所给的距离计算公式我们可以得到以下等式:。由于题目给定的坐标不会是小数,因此如果上述式子成立,那么一定也是整数,那这就好办了,我们先把结果拆分:$4 = 1+3



4=2+2



4=4+0(x1-x2)(y1-y2)(x1-x2) * (x1-x2)(y1-y2) * (y1-y2)4=0+4$ 不为, 不为,即(x1-x2) != 2\ &&\ (y1-y2) != 0或者(x1-x2) != 0\ &&\ (y1-y2) != 2,当满足此条件时对应的网格才可以放蛋糕。


我们可以来定义一个大小为h*w的二维数组来表示对应位置能不能放置蛋糕,如果能,对应位置置为0,否则置为1,首先,创建一个二维数组,并将所有的元素都置为0,表示能放置蛋糕,我们以从左到右,从上到下的顺序遍历该二维数组,如果遍历结果的值为0,计数器加1,并将下方向(i+2, j)与右方向(i, j+2)位置置为1,因为我们就是以向右与向下方向遍历的,所以修改右边与下边的网格结果即可,当然你想把四周的网格都改掉也可以,但是没有必要。



🔑源代码

import java.util.*;
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = sc.nextInt(); int h = sc.nextInt(); //标记,为0表示放置蛋糕,非0表示不放置蛋糕 int[][] f = new int[h][w]; int ans = 0; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (f[i][j] == 0) { ans++; //更新距离为2的位置为1 if (i + 2 < h) { f[i + 2][j] = 1; } if (j + 2 < w) { f[i][j + 2] = 1; } } } } System.out.println(ans); }}
复制代码

🌱总结

本题属于数学推理题,推导出不能放蛋糕的坐标关系时,我们可以先建立一个 W*H 二维数组,设状态0表示能放蛋糕,初始时所有网格都标记为可以放蛋糕,然后我们遍历数组,按照不能放蛋糕的坐标条件来将不满足放蛋糕的位置标记为1,最后我们在遍历过程中实时计算可以放蛋糕的格数即可。

发布于: 4 小时前阅读数: 10
用户头像

未见花闻

关注

坚持+努力=诗+远方 2021.11.15 加入

一位热爱技术热爱分享的大学生!

评论

发布
暂无评论
把字符串转换成整数与不要二_7月月更_未见花闻_InfoQ写作社区