【每天一道编程系列-2018.2.22】(Ans)
时间:2022-06-19
本文章向大家介绍【每天一道编程系列-2018.2.22】(Ans),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【题目描述】
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
【题目大意】
实现一个atoi函数,将字符串转成整形 要点:考虑所有的输入情况。
【解题思路】
前导字符是+或-或者没有,接下来输入的是数字,数字不能整数能表示的最大或最小数。如果超过就返回对应的最小或者最小的值。
【本题答案】
/**
* @author yesr
* @create 2018-02-22 下午10:21
* @desc
**/
public class Test0222 {
public int atoi(String str) {
if (str == null || str.length() == 0) {
// throw new NumberFormatException("Invalid input string: " + str);
return 0;
}
// 如果字符串以空格开始
int start = 0; //从开始找第一个不是空格的数
boolean positive = true; // 是否为正数默认为true
if (str.charAt(start) == ' ') {
while (str.charAt(start) == ' ') {
start++;
if (start >= str.length()) { // 输入的全是空格
// throw new NumberFormatException("Invalid input string: " + str);
return 0;
}
}
}
if (str.charAt(start) == '-') { // 第一个非空白字符中-
positive = false;
start++;
} else if (str.charAt(start) == '+') {// 第一个非空白字符是+
start++;
} else if (str.charAt(start) >= '0' && str.charAt(start) <= '9') { // 第一个非空白字符是数字
return cal(str, start, true);
} else { // 其它情况就抛出异常
// throw new NumberFormatException("Invalid input string: " + str);
return 0;
}
if (start >= str.length()) { // 第一个非空白字符是+或者-但也是最后一个字符
// throw new NumberFormatException("Invalid input string: " + str);
return 0;
}
if (str.charAt(start) > '9' || str.charAt(start) < '0') { // +或者-后面接的不是数字
// throw new NumberFormatException("Invalid input string: " + str);
return 0;
} else {
return cal(str, start, positive);
}
}
private int cal(String str, int start, boolean positive) {
long result = 0;
while (start < str.length() && str.charAt(start) >= '0' && str.charAt(start) <= '9') {
result = result * 10 + (str.charAt(start) - '0');
if (positive) { // 如果是正数
if (result > Integer.MAX_VALUE) {
// throw new NumberFormatException("Invalid input string: " + str);
return Integer.MAX_VALUE;
}
} else {
if (-result < Integer.MIN_VALUE) {
// throw new NumberFormatException("Invalid input string: " + str);
return Integer.MIN_VALUE;
}
}
start++;
}
if (positive) {
return (int) result;
} else {
return (int) -result;
}
}
}
- 设计模式学习--面向对象的5条设计原则之开放封闭原则--OCP
- 网络测试,带宽测试,流量测试
- github极简指南
- 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP
- Spring RestFul Example (实例参考)
- C#基础知识回顾---你不知道的Lazy<T>
- 用python编写验证码
- WPF备忘录(6)WPF实现打印功能
- 适合开发者的深度学习:第一天就能使用的编码神经网络工具
- Shell 历史记录异地留痕审计与监控
- Oracle 12c: arraysize会影响结果集么?
- 【学术】实践教程:使用神经网络对犬种进行分类
- Spring Data Redis
- 使用线程新建WPF窗体(公用进度条窗体)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php+iframe 实现上传文件功能示例
- php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
- 如何在OpenStack Kolla上部署Tungsten Fabric(附14个常见的配置问题)
- 浮点数的秘密
- 由多线程内存溢出产生的实战分析
- 消失的Java进程-Linux OOM Killer
- Myers‘Diff之贪婪算法
- DiffUtil和它的差量算法
- C语言高效编程与代码优化
- C/C++函数指针与指针函数
- 记一次FastJson漏洞的复现
- Flutter基础widgets教程-SizedOverflowBox篇
- 大量类加载器创建导致诡异FullGC
- 下载并安装Git
- 线程的六种状态转换