LeetCode 7
来源:互联网 发布:棋牌透视软件下载 编辑:程序博客网 时间:2024/06/05 09:59
荒废了几天之后,再写一次题解。
Problem 7 Reverse Integer
题目很简单,把给定的数转置,也就是倒过来写。大体思路就是把int
转成string
,然后倒序输出即可。
然而这里有两个问题,第一个是负数的问题。这个比较好解决,在转换成 string之前先判断是否小于零,最后把负号加上就好了。第二个问题比较棘手,那就是转置之后的数据有可能发生溢出,按照题目的要求发生溢出时应返回0。一个简单的方法是,既然作为int
会溢出,那么我用long long
存那肯定是不会溢出的。好的,现在问题就变成如何判断溢出了,这就只需要和INT_MAX
和INT_MIN
做个比较就可以得出结果。
这里顺便提一下C++中数字和字符串的互相转换问题。利用函数to_string()
可以将数字转化成字符串,接受的数据类型以及用法参考这里。而如果想把字符串转换成数字,那么可以使用stoX()
,这里的 X 就是一个数据类型,例如stoi()
就是将字符串转化成int
类型。更加详细的用法及说明参考这里
int reverse(int x) { bool is_above_zero = (x == abs(x)); string temp = to_string(x); int size = temp.length(); string result_string = ""; if (!is_above_zero) result_string = "-"; for (int i = size - 1; i >= 0; i--) { result_string += temp[i]; } long long result = stoll(result_string); if (result < INT_MIN || result > INT_MAX) result = 0; return result;}
Problem 8 String to Integer (atoi)
不得不说,对我而言,这个题目有些复杂,需要考虑几种情况,我们一步步来。
首先,对于给定的字符串,题目要求从第一个非whitespace
的字符开始转换,如果- +
号之后的第一个字符不是数字,那么转换终止,返回 0;
若转换继续,我们需要记录下来- +
号,随后,开始读取“数字”。
注意,这里的数字不一定是数字,如果读到一个不是数字的字符,那么转换终止,并且尝试返回当前已经转换的数字。
这里说尝试,那是因为需要转换成int
类型,那么就要判断是否溢出。对于溢出的判断上一题已给出方法,这里依然是通过long long
来完成。
了解以上基本步骤之后,我们还有一些代码上问题需要注意。
int myAtoi(string str) { long long result = 0; int size = str.length(); bool start = false, first = true, below_zero = false; for (int i = 0; i < size; i++) { if (!start && isspace(str[i])) continue; // start == true 开始转换后一旦发现不是数字的字符立刻终止 if (start && !(str[i] >= '0' && str[i] <= '9')) break; start = true; // 转换开始后判断第一个字符是 - 还是 +,并记录结果 if (first && (str[i] == '-')) { start = true; below_zero = true; first = false; continue; } else if (first && str[i] == '+') { start = true; first = false; continue; } if (!(str[i] >= '0' && str[i] <= '9')) break; if (below_zero) { result *= 10; result -= (str[i] - '0'); } else result = 10 * result + (str[i] - '0'); if (result > INT_MAX || result < INT_MIN) { result = (result > 0 ? INT_MAX : INT_MIN); break; } } return result;}
Problem 9 Palindrome Number
判断回文数,经典题目。但也确实简单,把它抓换成 string 之后就很方便,从头从尾向中心靠拢。主要就是一个循环结束条件。对于奇数个数,当头和尾相等时循环结束;偶数个数,头 - 尾 = 1时循环结束。为了让代码在只有一个数的情况下也能确保正确,再加上给下标设定取值范围[0,size - 1]
bool isPalindrome(int x) { if (x < 0) return false; string num = to_string(x); int size = num.length(); int i = 0, j = size - 1; do { if (num[i] != num[j]) return false; i++, j--; } while (!(i == j || i - j == 1) && j >= 0 && i < size); return true;}
- leetcode 7
- LeetCode--7
- leetcode 7
- LeetCode 7
- LeetCode(7)
- LeetCode 7 - Reverse Integer
- LeetCode(7) Reverse Integer
- leetcode 7REVERSE INTEGER
- [leetcode 7] Reverse Integer
- [Leetcode] 7 - Reverse Integer
- LeetCode 7:《Reverse Integer》
- [leetcode 7] Reverse Integer
- LeetCode | #7 Reverse Integer
- Leetcode记录7-单链表
- leetcode.7-----------Reverse Integer
- leetCode #7 reverse int
- LeetCode 7: Reverse Integer
- leetcode-7 Reverse Integer
- PHP 友好时间显示
- SQL Server查询外键约束与删除外键约束
- javaOOP 读取硬盘上的一个文本文件
- 线上应用故障排查:高CPU占用
- 来写一个模块加载器吧
- LeetCode 7
- 小白在Ubuntu安装mongoDB 与 mongo-c-driver
- Modelling of glass surfaces(1)
- 【LeetCode】Relative Ranks 解题报告
- ADC的总结学习笔记
- 读取、生成JSON
- LeetCode100. Same Tree
- 2016年面对资本寒冬互联网行业年薪仍上涨17%!
- 完整的R语言预测建模实例-从数据清理到建模预测