秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

2024-05-29 1200阅读

文章目录

    • 复习
      • Z字形变换
        • 实现代码
        • 参考代码
        • 两数之和
          • 复习代码
          • 新作
              • 整数反转
                • 个人实现
                  • 实现代码
                  • 参考做法
                  • 字符串转换整数
                  • 个人解法
                  • 分析总结

                    复习

                    Z字形变换

                    秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                    秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                    秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                    实现代码
                    • 这里使用了他的思想,但是没有用他的代码,虽然已经比上次简洁了,但是还是不够,在学习一下他的代码!
                       string convert(string s,int numRows){
                              string res[numRows];
                              string r ;
                              if (numRows == 1 )  return s;
                              for (int i = 0; i  
                      
                      参考代码
                       string convert(string s,int n){
                              string r ;
                              if (n == 1 )  return s;
                              // 分别遍历一下numRows还有整个字符串
                              for (int i = 0; i  
                      

                      两数之和

                      • 这题很清晰,就是模拟两个数字的相加过程,需要注意的是,就是三个数相加,分别是节点1、节点2、还有addNum,有一个不为空,就继续往上加

                        秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                        复习代码

                        注意

                        • 创建一个临时头节点,方便操作
                        • 操作指针,要判定当前指针是否为空
                        • 指针记得向后移动
                              ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
                                 auto dummy = new ListNode(),cur = dummy;
                                 int addNum = 0;
                                 while(l1 || l2 || addNum){
                                     if(l1) addNum += l1->val ,l1 = l1->next;
                                     if(l2) addNum += l2->val ,l2 = l2->next;
                                     cur->next = new ListNode(addNum % 10);
                                     cur = cur->next;
                                     addNum = addNum / 10;
                                 }
                                 return dummy->next;
                              }
                          

                          新作

                          整数反转

                          秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                          个人实现
                          • 因为int类型存储有限,所以想的是直接使用string类型的数据进行处理,就不用担心对应的超范围问题,然后使用stoi函数。同时超过范围的检测,也是使用string进行遍历检测。

                            不过,今天又是一遍过!

                            秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                            实现代码
                             int reverse(int x){
                                    bool isPos = x  m[i] )   return 0;
                                            if (s[i]  
                            
                            参考做法
                            • 通过求余10,来获取当前的位数,然后通过乘以10,来变成对应的数字

                            • 如果不能存储超过范围的数字,那就通过因式变化实现。

                              秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                              • 下述想法实现的确实比我的简洁很多,而且操作字符串,确实比操作数字要慢很多。
                                • 字符串底层实现reverse的时间复杂度是,底层是通过反转迭代器来实现的,双指针同时遍历,所以时间复杂度是O(n),和这个算法差不多,只不过我有多遍历了一次判定是否越界。
                                • 如果会溢出,就变换形态。
                                  int reverse(int x){
                                      int r = 0;
                                      while (x){
                                          if (r > 0 && r > (INT_MAX - x % 10) / 10) return 0;
                                          if (r  
                                  
                                  字符串转换整数

                                  题目链接

                                  秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                                  个人解法
                                  • 单纯逐个遍历,然后根据不同的情况进行不同的操作,执行效果如下。逻辑比较松散,需要看看官方思路是怎么做的,会不会完整一点。

                                    秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

                                    class Solution {
                                    public:
                                        int myAtoi(string s){
                                        bool numFlag = false,sigFlag = false;
                                        int r = 0 ,sig = 1;
                                        for (int i = 0; i  (INT_MAX - num) / 10){
                                                    if (sig == 1) return INT_MAX;
                                                    else return INT_MIN;                
                                                }
                                                r = r * 10 + num;
                                            }
                                            // 非数字,直接退出,并返回已经拼接成的数字
                                            else    break;
                                            // s
                                        }
                                        return r * sig;
                                    }
                                    };
                                    

                                    分析总结

                                    • 时间来不及了,今天就不看官方参考了,明天要准备面试了!
VPS购买请点击我

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

目录[+]