8. 字符串转换整数 (atoi)


自己做
解:遍历读取

class Solution {
public:int myAtoi(string s) {int sum = 0; //读取的数字int len = s.size(); //字符串长度 bool sub_num = false; //数字符号【默认为+】bool frist = false; //表示遇到第一个正负号//从左往右读int start = 0;while (s[start] == ' ') //忽略字符串前面的空格start++;for (int i = start; i < len; i++) {if (s[i] < 48 && s[i] > 57 && s[i] != '+' && s[i] != '-' && !frist) //遇到了非数字非+-的字符直接返回return sum;if ((s[i] == '+' || s[i] == '-') && !frist) { //遇到的第一个正负符号if (s[i] == '-') //负号sub_num = true;frist = true;continue; //跳过累加}if (s[i] >= 48 && s[i] <= 57 && !frist) //没有+-,直接是数字frist = true;//累加if (s[i] >= 48 && s[i] <= 57) { //是数字int add = s[i] - 48;if (sub_num) //为负的情况add = -add;//累加前判断溢出if (!sub_num &&sum > std::numeric_limits<int>::max() / 10 ||(sum == std::numeric_limits<int>::max() / 10 && add > 7)) //为正大于最大值return std::numeric_limits<int>::max();if (sub_num &&sum < std::numeric_limits<int>::min() / 10 ||(sum == std::numeric_limits<int>::min() / 10 && add < -8)) //为负小于最小值return std::numeric_limits<int>::min();sum = sum * 10 + add; //累加}else { //遇到非数字,直接返回return sum;}}return sum;}
};

9. 回文数

自己做
解1:求余取数

class Solution {
public:bool isPalindrome(int x) {int left_div = 1;int right_div = 1;int mutil = 10;int len = 1; //x的长度//负数必定不是回文数if (x < 0)return false;//cout << x / left_div << endl;while (x / left_div >= 10) {left_div *= 10;len++;}//cout << left_div << ","<< len <<endl;for (int i = 0; i < len / 2; i++) { //比较一半即可if (x / left_div % 10 == x % mutil / right_div) { //相等left_div /= 10;right_div *= 10;mutil *= 10;}else { //出现不相等return false;}}return true;}
};
解2:转换字符串

class Solution {
public:bool isPalindrome(int x) {string s;if (x < 0)return false;while (x != 0) {s.push_back(x % 10 + 48); //ASCII码转换x /= 10;}int len = s.size();for (int i = 0; i < len / 2; i++) {if (s[i] != s[len - 1 - i])return false;}return true;}
};