• 【LC_Overview1_5】---学会总结回顾


    刷LeetCode题目一周,主要采用C++和Python编程手段,截至目前做了5道简单的leetcode题目,做下阶段性的小结:

    小结主要通过手撕代码,复习加回顾,尽量避免自己眼高手低的情况发生,对于自己还不熟悉的内容,再次标注出来吗,以下是手撕代码的记录:

    Python实现:

    第二遍编程中出现的问题和不熟的地方,都已标注出来,着重复习,

     1 class Solution:
     2     """
     3     注意:
     4         1. Python预研在处理负数时,最好将其转换成正数,然后最后把结果乘-1
     5         2. 学到了一种赋值+判断的写代码方式
     6     """
     7     def ReverseNum(self,num:int)->int:
     8         rev = 0;
     9         temp:int = num if num>0 else -num
    10         while (temp):
    11             pop = temp%10
    12             rev = rev*10 + pop
    13             temp = temp//10
    14 
    15             INT_MAX = pow(2,31)-1
    16             INT_MIN = pow(2,31)*(-1)
    17 
    18             if num > 0:
    19                 if rev > INT_MAX:
    20                     return 0
    21             else:
    22                 if (-rev) < INT_MIN:
    23                     return 0
    24         return rev if num>0 else -rev
    25 
    26     """
    27     注意:
    28 29     """
    30     def isPalindrome(self,num:int)->bool:
    31         if num < 0:
    32             return False
    33         rev = 0
    34         temp = num
    35         INT_MAX = pow(2,31)-1
    36         while(temp):
    37             pop = temp%10
    38             rev = rev*10 + pop
    39             temp = temp//10
    40 
    41         if (rev != num):
    42             return False
    43         return True
    44 
    45     """
    46         注意:
    47             1. 当长度为1的时候,for循环中的算法将不起作用
    48             2. python的字符串没有最后的'',因此一定要考虑最后一个越界的影响
    49     """
    50     def romanToNum(self,strs)->int:
    51         table = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'m':1000}
    52 
    53         if (len(strs) == 1):
    54             return table[strs[0]]
    55         rev = 0
    56         for i in range(len(strs)-1):
    57             if table[strs[i]] < table[strs[i+1]]:
    58                 rev -= table[strs[i]]
    59             else:
    60                 rev += table[strs[i]]
    61         return (rev + table[strs[i+1]])
    62 
    63     """
    64     注意:
    65         当输入为空列表时,需要第一个if判断
    66         当输入列表含有空字串时,则需要return时判断i的值是否大于0
    67     """
    68     def longestCommonPrefix(self, strs)->str:
    69         if len(strs)==0:
    70             return ""
    71 
    72         for i in range(len(strs[0])):
    73             for j in range(1,len(strs)):
    74                 if i>=len(strs[j]) or strs[0][i] != strs[j][i]:
    75                     return strs[0][0:i] if i>0 else ""
    76         return strs[0]

    C++实现

      1 class Solution{
      2     public:
      3         int ReverseNum(int num);
      4         bool isPalindrome(int num);
      5         int RomanToNum(string RomanStr);
      6         string longestCommonPrefix(vector<string> &strs);
      7 };
      8 
      9 int Solution::ReverseNum(int num)
     10 {   
     11     long long rev = 0;
     12     int temp = num;
     13     while(temp)
     14     {
     15         int pop = temp%10;
     16         rev = rev*10 + pop;
     17         temp = temp/10;
     18         if(rev < INT_MIN || rev > INT_MAX)
     19         {
     20             return 0;
     21         }
     22     }
     23     return rev;
     24 };
     25 
     26 
     27 /*
     28 注意:
     29     1. 数据在发生反转的时候,一定要考虑溢出的情况,C++中可以采用更宽字节类型的变量来暂存结果,python可能需要溢出  
     30 */
     31 bool Solution::isPalindrome(int num)
     32 {
     33     if (num < 0){
     34         return false;
     35     }
     36     long long rev = 0;
     37     int temp = num;
     38     while(temp)
     39     {
     40         int pop = temp%10;
     41         rev = rev*10 + pop;
     42         temp /= 10;
     43     }
     44     if (num != rev)
     45         return false;
     46     return true;
     47 };
     48 
     49 
     50 /*
     51 注意:
     52     1. 再次重温了下map的使用方式
     53 */
     54 int Solution::RomanToNum(string RomanStr)
     55 {
     56     int rev = 0;
     57     if (RomanStr.empty())
     58         return 0;
     59     map<char,int> table = {
     60         {'I',1},
     61         {'V',5},
     62         {'X',10},
     63         {'L',50},
     64         {'C',100},
     65         {'D',500},
     66         {'M',1000}
     67     };
     68 
     69     int length =RomanStr.size();
     70     for(int index=0; index<length; index++)
     71     {
     72         if(table[RomanStr[index]] < table[RomanStr[index+1]])
     73         {
     74             rev += (-1) * table[RomanStr[index]];
     75             continue;
     76         }
     77         rev += table[RomanStr[index]];   
     78     }
     79     return rev;
     80 };
     81 
     82 /*
     83 注意:
     84     1. vector的使用方法
     85     2. substr的使用方法
     86     3. C++中对于字串返回可以直接返回""",不像python要注意返回空字串和空列表的区别
     87 */
     88 string Solution::longestCommonPrefix(vector<string> &strs)
     89 {
     90     if (strs.size()==0 || strs[0].size()==0)
     91     {
     92         return "";
     93     }
     94 
     95     for(int i=0; i<strs[0].size(); i++)
     96     {
     97         for(int j=1; j<strs.size(); j++)
     98         {
     99             if (strs[0][i] != strs[j][i]){
    100                 return strs[0].substr(0,i);
    101             }
    102         }
    103     }
    104     return strs[0];
    105 }
  • 相关阅读:
    C#类型转换
    C#运算符
    SQL视图与触发器
    存储过程
    SQL 变量
    SQL 经典练习题
    字符串函数,数据类型转换,链接查询,纵向查询
    常用的 SQL 函数
    习题整理(1)
    子查询的部分内容
  • 原文地址:https://www.cnblogs.com/szhb-5251/p/11765389.html
Copyright © 2020-2023  润新知