建筑设计师专业网站,山东网站建设推广,气球网站建设,网站建设与规划案例目录 1.字符串转成整数
2.字符串相加
3.高精度加法模板#xff08;acwing#xff09;
4.验证回文串 1.字符串转成整数
题目#xff1a;将一个字符串转换成一个整数#xff0c;要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的…目录 1.字符串转成整数
2.字符串相加
3.高精度加法模板acwing
4.验证回文串 1.字符串转成整数
题目将一个字符串转换成一个整数要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的字符串包括数字字母符号可以为空。
例子 输入2147483647 输出“2147483647” 思路
分两步进行1.先判断除第一个字符以外的其他字符若不满足题意则返回0若满足则进行计算2.最后判断第一个字符若还是字符则进行计算并返回若是正负号则加正负号返回若都不是则返回0
代码
class Solution {
public:int StrToInt(string str) {if (str.size() 0)return 0;int start 0; int end str.size() - 1; int ret 0; int i 1; while (start end) {if (str[end] 0 || str[end] 9) {return 0;}ret i*(str[end] - 0); i * 10; end--; }if (str[end] 0 str[end] 9) return ret i*(str[end] - 0); if (str[end] ) return ret; if (str[end] -) return -ret; return 0; }
};
2.字符串相加
题目
给定两个字符串形式的非负整数num1和num2计算它们的和。
示例 1
输入num1 11, num2 123
输出134示例 2
输入num1 456, num2 77
输出533示例 3
输入num1 0, num2 0
输出0思路用高精度加法来模拟我们平常计算加法将字符串逆置设置进位来处理。
class Solution {
public:string addStrings(string A, string B) {if (A.size() B.size()) return addStrings(B, A);reverse(A.begin(),A.end());//逆置用来模拟实现加法计算reverse(B.begin(),B.end());//逆置用来模拟实现加法计算string ret;//存储int t0;for (int i 0; iA.size(); i ){t A[i]-0;if (i B.size()) t B[i]-0;ret.push_back(t % 100);t / 10;}if (t) ret.push_back(t0);//进位1reverse(ret.begin(),ret.end());//逆置返回return ret;}
};
3.高精度加法模板acwing
// C A B, A 0, B 0
vectorint add(vectorint A, vectorint B)
{if (A.size() B.size()) return add(B, A);vectorint C;int t 0;for (int i 0; i A.size(); i ){t A[i];if (i B.size()) t B[i];C.push_back(t % 10);t / 10;}if (t) C.push_back(t);return C;
}
4.验证回文串
题目给定一个字符串验证它是否是回文串只考虑字母和数字字符可以忽略字母的大小写。
示例 输入“A man, a plan, a canal: Panama” 输出true
思路
基本思路就是双指针的思路由于要忽略字母的大小写我们可以先将大写字母转换成小写字母再进行双指针算法并再--的过程中跳过一些无关的字符直到左右指针相遇。
class Solution {
public:bool check(char ch){if ((ch a ch z)|| (ch 0 ch 9))return true;elsereturn false;}bool isPalindrome(string s) {for (auto ch : s){if (ch A ch Z)ch 32;}int begin 0, end s.size() - 1;while (begin end) //当还有字母未判断时循环继续{while (begin end !isLetterOrNumber(s[begin])) begin;while (begin end !isLetterOrNumber(s[end])) end--;if (s[begin] s[end]) {begin;end--;}else return false; }return true; }
};