C++:OJ练习(每日练习系列)
温馨提示:这篇文章已超过426天没有更新,请注意相关的内容是否还可用!
编程题:
题一:字符串相加
415. 字符串相加 - 力扣(LeetCode)
思路一:
第一步:需要获取字符串的两个尾节点下标;
第二步:创建用于记录进位数、获得的字符串的变量;
第三步:只要有进位或还有数没有加完继续循环:利用三目运算:有符号+符号,无符号+0;
第四步:最后将得到的字符串逆置,就是需要的结果。
class Solution {
public:
string addStrings(string num1, string num2)
{
//获取字符串的尾节点
int it1 = num1.size() - 1;
int it2 = num2.size() - 1;
//记录进位数
int count = 0;
//获得的字符串
string s1 = "";
//有进位或还有数没有加完
while(it1 >= 0 || it2 >= 0 || count != 0)
{
//三目运算:有符号+符号,无符号+0
int x = it1 >= 0 ? num1[it1] - '0' : 0;
int y = it2 >= 0 ? num2[it2] - '0' : 0;
int n = x + y + count;
int num = n % 10;
count = n / 10;
s1.push_back(num + '0');
--it1;
--it2;
}
//得到的是逆置的字符串
reverse(s1.begin(),s1.end());
return s1;
}
};
题二:验证回文串
125. 验证回文串 - 力扣(LeetCode)
思路一:
第一步:遍历字符串将大写改小写并删除非字母和数字的字符;
第二步:判断对称比较字符是否相等;
class Solution {
public:
bool isPalindrome(string s)
{
//遍历字符串将大写改小写并删除非字母和数字的字符
for(int i = 0; i 'z') && (s[i] '9'))
{
s.erase(i,1);
i--;
}
}
//对称比较字符是否相等
int left = 0;
int right = s.size() - 1;
while(left
题三:反转字符串
541. 反转字符串 II - 力扣(LeetCode)
思路一:
第一步:分别创建记录起始位置和末尾位置的节点;
第二步:只要后面还有字符就继续执行循环:1.计数2k个字符,就反转这2k字符中的前k个字符;2.字符小于2k但大于或等于k个,则反转前k个字符;3.剩余字符少于k个,将剩余字符全部反转。
特别注意:reverse是逆置左闭右开的区间!!!
class Solution {
public:
string reverseStr(string s, int k)
{
//分别创建记录起始位置和末尾位置的节点
string::iterator cur = s.begin();
string::iterator tail = s.end();
//只要后面还有字符就继续执行
while(cur != tail)
{
//计数2k 个字符,就反转这2k字符中的前k个字符
if(cur + 2*k = 0 || count != 0)
{
//三目运算:有符号+符号,无符号+0
int x = it1 >= 0 ? num1[it1] - '0' : 0;
int y = it2 >= 0 ? num2[it2] - '0' : 0;
int n = x + y + count;
int num = n % 10;
count = n / 10;
s1.push_back(num + '0');
--it1;
--it2;
}
//得到的是逆置的字符串
reverse(s1.begin(),s1.end());
return s1;
}
string multiply(string num1, string num2)
{
//得到最后的结果的s1
string s1;
//count用于记录进位
int count = 0;
//enter用于记录进行了几次乘加
int enter = 0;
//n1做为被乘数
int n1 = num1.size() - 1;
while(0 = 0 ? num2[n2] - '0' : 0;
int num = x * y + count;
count = num / 10;
tmp.push_back((num % 10) + '0');
--n2;
}
//所得结果逆置
reverse(tmp.begin(),tmp.end());
//对每一次的乘积进行当前结果求和
s1 = addStrings(s1,tmp,enter);
++enter;
--n1;
}
//判断:如果字符串全为‘0’,则返回“0”
int nn = s1.size() ;
while(nn--)
{
if(s1[nn] - '0' != 0)
{
return s1;
}
}
return "0";
}
};
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!





