鼠鼠努力刷力扣——EP1

  • Post author:
  • Post category:其他




Q1:整数反转

思路:题目的核心逻辑很好理解,只要将给出的数不断的对10进行取模,然后再整除10即可,难点和易错点主要是在于判断数是否会进行溢出。

这里引入C++中的一个知识点

因为无法正向判断是否溢出,所以要考虑以下情况:

1.当result > INT_MAX/10(整数情况)

2.当result < INT_MIN/10(负数情况)

3.当result = INT_MAX/10(整数情况)

注意,这里还要再判断是够会大于7,大于7同样会溢出,所以还需要加上大于INT_MAX%10

4.当result < INT_MIN/10(负数情况),同理,还需要加上<INT_MIN%10

题解:

class Solution {
public:

    int num,result = 0;
    int reverse(int x) {
        while(x!=0)
        {
            num = x % 10;
            x = x / 10;

//判断第二种和第四种情况
            if (result < INT_MIN / 10 || (result == INT_MIN && result < INT_MIN % 10 )) {
                return 0;
            }
//判断第一种和第三种情况
            if (result > INT_MAX / 10 || (result == INT_MAX && result > INT_MAX % 10 )) {
                return 0;
            }
//不断更新返回结果
            result = result*10+num;
        }
          return result;
    }
};


Q2:解密消息

思路:可以尝试构建一个哈希表,将给出的key依次遍历,放在哈希表中,最后根据哈希表和message进行一一对应,修改message后再返回message即可

学到的新知识:


C++11的遍历:

for(auto c :s):基于范围的 for 循环中,c 表示 s中的一个元素,auto 则是让编译器自动推导出 c 的类型,每次循环体中c即可代表当前遍历到s的值,若要进行修改,需要在c的前面加上&


unordered_map<string,string> arr;

具体函数的用法可以参考STL的用法

题解:

class Solution {
public:
    string decodeMessage(string key, string message) {
       char tmp = 'a';
        unordered_map<char, char> arr;
    
          for(char c:key)  //循环遍历key,当不为空格并且当前的值未曾在哈希表中存在即可进行赋值
        {
            if(c !=' '&& !arr.count(c))
             {arr[c] = tmp++;}
        }

         for(char& c :message)  //&修改c
        {
            if(c !=' ')
            {c = arr[c];}
        }

        return message;
    }
};



版权声明:本文为qq_52912951原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。