Leetcode 题目整理-2 Reverse Integer && String to Integer
今天的两道题关于基本数据类型的探讨,估计也是要考虑各种情况,要细致学习
7. Reverse Integer
Reverse digits of an integer.
Example1: x = 123, return 321 Example2: x = -123, return -321
Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
Update (2014-11-10): Test cases had been added to test the overflow behavior.
注:颠倒整数中的每一位,符号位保留。估计会有一些极端情况需要考虑,这里指出了几个,如,末位为0 翻转之后是什么?又如,如果翻转之后超出了数据类型的表达范围怎么办?。。。可能还会遇到其它的困难^~^
解:在考虑最值的时候必须另外定义最值为int 常量,否则的话系统会给他分配一个合适的类型
直接写成这个做判断是不可以的。
if (temp >0x7fffffff || temp < 0x80000000)
{
return result;
}
下面是提交通过的代码:
class Solution {
public:
int reverse(int x) {
int result{0};
long long temp{0};
const int max_int=0x7fffffff;// 0111 1111 1111 1111 ... 1111 32bit
const int min_int=0x80000000;//1000 0000 0000 0000 ... 0000 32bit
while (x != 0)
{
temp = temp*10 + x%10;
x = x / 10;
if (temp > max_int || temp < min_int)
{
return result;
}
}
result = temp;
return result;
}
};
8. String to Integer (atoi)
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.
Update (2015-02-10): The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
Requirements for atoi:
The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.
The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
注:把一个字符串转换为整数。要考虑所有可能的输入情况。这个问题在《c++入门经典》中设计计算器时遇到过,只是当时没有细细的分析每一种情况,现在要好好看看。
解:这个简直是不可理喻,一下列举了一些可能出现的情况
input:“+ - 2”expected:0
input:“+ 01 1 2”expected:1
input:“+ + 2”expected:0
input:“-012a34”expected:12
input:" +11191657170"expected:2147483647
代码如下,有待精简:
long long result{ 0 };
int n{ 0 };//位数
int sign{ 1 }, p_n_flag{ 0 }, zero_flag{0};
for (string::iterator s_i = str.begin(); s_i != str.end(); s_i++)
{
if (*s_i == '-')
{
if (p_n_flag==0)
{
p_n_flag = 1;
sign = -1;
continue;
}
else
{
sign = 0;//如果出现两次被认为是非法输入
break;
}
}
if (*s_i == '+')
{
if (p_n_flag == 0)
{
p_n_flag = 1;
sign = 1;
continue;
}
else
{
sign = 0;
break;
}
}
if (*s_i == ' ')
{
if (n == 0 && zero_flag == 0 && p_n_flag==0)
{ continue; }
else
{break;}
}
if (*s_i == '0')
{
zero_flag = 1;
if (n == 0)
{continue;}
else
{
n = n + 1;
result = result * 10;
if (result > INT_MAX)
{
switch (sign)
{
case 0:return 0;
case 1:return INT_MAX;
case -1:return INT_MIN;
default:
break;
}
}
else
{continue;}
}
}
if ((*s_i) > '0' && ((*s_i) < '9' || (*s_i) == '9'))
{
n = n + 1;
//result = result * 10 + ((*s_i) - 48);
result = result * 10 + ((*s_i) - '0');//最后一个括号里不用显式的值48 而是用‘0’
cout << result << endl;
if (result > INT_MAX)
{
switch (sign)
{
case 0:return 0;
case 1:return INT_MAX;
case -1:return INT_MIN;
default:
break;
}
}
}
else
{
break;
}
}
result = result*sign;
return result;
Leetcode 题目整理-2 Reverse Integer && String to Integer的更多相关文章
- Leetcode 题目整理-3 Palindrome Number & Roman to Integer
9. Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. clic ...
- 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number
[Q7] 把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...
- 【LeetCode】7 & 8 - Reverse Integer & String to Integer (atoi)
7 - Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Notic ...
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- LeetCode.8-字符串转整数(String to Integer (atoi))
这是悦乐书的第349次更新,第374篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第4题(顺位题号是8).实现将字符串转换为整数的atoi方法. 该函数首先去掉所需丢 ...
- Leetcode 题目整理 climbing stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- Leetcode 题目整理-8 Count and Say
38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...
- Leetcode 题目整理-1
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
- 【leetcode题目整理】数组中找子集
368. Largest Divisible Subset 题意:找到所有元素都不同的数组中满足以下规则的最大子集,规则为:子集中的任意两个元素a和b,满足a%b=0或者b%a=0. 解答:利用动态规 ...
随机推荐
- CentOS 下 jenkins 安装
前置条件 jdk 和 maven 都配置好的环境,不赘述. 下载安装文件 选择一个 rpm 包 http://pkg.jenkins-ci.org/redhat/ 完成后执行命令 sudo rpm - ...
- 【题解】P5589 小猪佩奇玩游戏(期望)
[题解]P5589 小猪佩奇玩游戏(期望) 假设一个点有\(x\)个点(包括自己)可以到达他,他就对答案有\(1/x\)的贡献.这是因为这个点必须被删掉而通过删掉这个点本身删掉这个点的概率是\(1/x ...
- CodeIgniter框架多条件搜索查询分页功能解决方案
最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...
- CAP 3.0 版本发布通告
前言 大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版. 自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3. ...
- 搞定SpringBoot多数据源(1):多套源策略
目录 1. 引言 2. 运行环境 3. 多套数据源 3.1 搭建 Spring Boot 工程 3.1.1 初始化 Spring Boot 工程 3.1.2 添加 MyBatis Plus 依赖 3. ...
- vPlayer 模块Demo
本文出自APICloud官方论坛 vPlayer iOS封装了AVPlayer视频播放功能(支持音频播放).iOS 平台上支持的视频文件格式有:WMV,AVI,MKV,RMVB,RM,XVID,MP4 ...
- 【C_Language】---C文件学习
---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...
- 【C_Language】---一份程序看懂C程序printf()的几种常用用法
闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...
- Fibnoccia 数列简单题
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, ...
- PTA - 拓扑排序
一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工 ...