【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 }
原文地址:https://www.cnblogs.com/szhb-5251/p/11765389.html