C++:OJ练习(每日练习系列)

2024-02-26 1707阅读

温馨提示:这篇文章已超过426天没有更新,请注意相关的内容是否还可用!

C++:OJ练习(每日练习系列)

编程题:

题一:字符串相加

415. 字符串相加 - 力扣(LeetCode)

C++:OJ练习(每日练习系列)

思路一:

第一步:需要获取字符串的两个尾节点下标;

第二步:创建用于记录进位数、获得的字符串的变量;

第三步:只要有进位或还有数没有加完继续循环:利用三目运算:有符号+符号,无符号+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)

C++:OJ练习(每日练习系列)

思路一:

第一步:遍历字符串将大写改小写并删除非字母和数字的字符;

第二步:判断对称比较字符是否相等;

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)

C++:OJ练习(每日练习系列)

思路一:

第一步:分别创建记录起始位置和末尾位置的节点;

第二步:只要后面还有字符就继续执行循环: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";
    }
};

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              C++:OJ练习(每日练习系列)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]