题目7
思路:
使用 digit=x % 10 获取最后一位数字。
使用 x /= 10 去掉最后一位数字。
将结果 更新为 result * 10 + digit
class Solution {
public:
int reverse(int x) {
int result = 0;
while (x != 0) {
int digit = x % 10; // 取最后一位
x /= 10; // 去掉最后一位
// 检查是否溢出
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && digit > 7)) {
return 0;
}
if (result < INT_MIN / 10 || (result == INT_MIN / 10 && digit < -8)) {
return 0;
}
result = result * 10 + digit; // 更新结果
}
return result;
}
};
题目8
这个题真的太恶心了,分支结构要用好几个,用C++写的话代码太长而且晕了,这里参考一个别人写的python代码
class Solution:
def myAtoi(self, s: str) -> int:
return max(
min(
(
lambda v1=s.lstrip(): (
lambda v2=(v1[1:] if v1 and v1[0] in "+-" else v1), sign=(
-1 if v1[0] in "-" else 1
): (
(
lambda v3=[
c if c in "0123456789" else "" for c in v2
]: (
lambda v4=(
v3[: v3.index("")] if "" in v3 else v3
): (
lambda v5="".join(v4): (
int(v5) if v5.isnumeric() else 0
)
)()
)()
* sign
)()
)
)() if v1 else 0
)(),
2**31 - 1,
),
-(2**31),
)
官方给的题解
class Automaton {
string state = "start";
unordered_map<string, vector<string>> table = {
{"start", {"start", "signed", "in_number", "end"}},
{"signed", {"end", "end", "in_number", "end"}},
{"in_number", {"end", "end", "in_number", "end"}},
{"end", {"end", "end", "end", "end"}}
};
int get_col(char c) {
if (isspace(c)) return 0;
if (c == '+' or c == '-') return 1;
if (isdigit(c)) return 2;
return 3;
}
public:
int sign = 1;
long long ans = 0;
void get(char c) {
state = table[state][get_col(c)];
if (state == "in_number") {
ans = ans * 10 + c - '0';
ans = sign == 1 ? min(ans, (long long)INT_MAX) : min(ans, -(long long)INT_MIN);
}
else if (state == "signed")
sign = c == '+' ? 1 : -1;
}
};
class Solution {
public:
int myAtoi(string str) {
Automaton automaton;
for (char c : str)
automaton.get(c);
return automaton.sign * automaton.ans;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/string-to-integer-atoi/solutions/183164/zi-fu-chuan-zhuan-huan-zheng-shu-atoi-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目9
#include <iostream>
class Solution {
public:
bool isPalindrome(int x) {
// 负数和以 0 结尾的非零数不是回文数
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reversed = 0;
while (x > reversed) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
// 当数字长度为奇数时,通过 reversed/10 去除中间的数字
return x == reversed || x == reversed / 10;
}
};