【LeetCode刷题】最近一月刷题总结(罗马数字转整数+质数相关+ for的5种用法+错误的集合+符号优先级)

罗马数字转整数+质数相关+ for5种用法+错误的集合+符号优先级

2019920

11:15

  1. 铁憨憨  
  2. class Solution {  
  3. public:  
  4.     int romanToInt(string s) {  
  5.         string a={'I','V','X','L','C','D','M'};  
  6.         int sum=0,len=s.length(); `your inline code...`   
  7.         switch(s[len-1]){  
  8.             case 'I':sum++;break;  
  9.             case 'V':sum+=5;break;  
  10.             case 'X':sum+=10;break;  
  11.             case 'L':sum+=50;break;  
  12.             case 'C':sum+=100;break;  
  13.             case 'D':sum+=500;break;  
  14.             case 'M':sum+=1000;break;  
  15.         }  
  16.         for(int i=len-2;i>=0;i--){  
  17.             if(a.find(s[i])>=a.find(s[i+1])){  
  18.                 switch(s[i]){  
  19.                     case 'I':sum++;break;  
  20.                     case 'V':sum+=5;break;  
  21.                     case 'X':sum+=10;break;  
  22.                     case 'L':sum+=50;break;  
  23.                     case 'C':sum+=100;break;  
  24.                     case 'D':sum+=500;break;  
  25.                     case 'M':sum+=1000;break;  
  26.                  }  
  27.             }else{  
  28.                 switch(s[i]){  
  29.                     case 'I':sum--;break;  
  30.                     case 'V':sum-=5;break;  
  31.                     case 'X':sum-=10;break;  
  32.                     case 'L':sum-=50;break;  
  33.                     case 'C':sum-=100;break;  
  34.                     case 'D':sum-=500;break;  
  35.                     case 'M':sum-=1000;break;  
  36.                 }  
  37.             }  
  38.         }  
  39.         return sum;      
  40.     }  
  41. };  
  42.      
  43. 来自 <https://leetcode-cn.com/problems/roman-to-integer/comments/>   
  44. 大神(正则)  
  45. class Solution {  
  46. public:  
  47.     int romanToInt(string s) {  
  48. string roman[13] = {  
  49.                 "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"  
  50.         };  
  51.         int nums[13] = {  
  52.                 1000,900,500,400,100,90,50,40,10,9,5,4,1  
  53.         };  
  54.         int res = 0;  
  55.         int i = 0;  
  56.         int j = 0;  
  57.         while (j < 13 && i < s.size()){  
  58.             while ( s.substr(i, 1)== roman[j] || s.substr(i, 2) == roman[j]){  
  59.                 if (s.substr(i, 1) == roman[j])  
  60.                     i++;  
  61.                 else if (s.substr(i, 2) == roman[j])  
  62.                     i += 2;  
  63.                 res += nums[j];  
  64.             }  
  65.             j++;  
  66.         }  
  67.         return res;  
  68.     }  
  69. };  
  70.      
  71. 来自 <https://leetcode-cn.com/problems/roman-to-integer/comments/>   
  72.  
  73. 正常人hashmap解法:  
  74. class Solution {  
  75. public:  
  76.     int romanToInt(string s) {  
  77.         map<char,int> val;  
  78.         val['I'] = 1;val['V'] = 5;val['X'] = 10;val['L'] = 50;  
  79.         val['C'] = 100;val['D'] = 500;val['M'] = 1000;  
  80.         int sum = 0;  
  81.         for(int i = 0; i < s.size()-1; ++i){  
  82.             if(val[s[i]] >= val[s[i+1]]) sum += val[s[i]];  
  83.             else sum -= val[s[i]];  
  84.         }  
  85.         sum+=val[s.back()];  
  86.         return sum;  
  87.     }  
  88. };  
  89.      
  90. 来自 <https://leetcode-cn.com/problems/roman-to-integer/comments/>   

   

   

质数相关

2019923

20:03

  1. 都列出来查表  
  2. const int mod = 1e9 + 7;  
  3. const vector<int> primes{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};  
  4. vector<long> factorial_cache(101);  
  5. int cache_size = 1;  
  6. class Solution {  
  7. public:  
  8.     int numPrimeArrangements(int n) {  
  9.         factorial_cache[0] = 1;  
  10.         int numPrimes = distance(primes.begin(), upper_bound(primes.begin(), primes.end(), n));  
  11.         return factorial(numPrimes) * factorial(n - numPrimes) % mod;  
  12.     }  
  13.     long factorial(int n) {  
  14.         if(factorial_cache[n])  
  15.             return factorial_cache[n];  
  16.         for(;cache_size<=n;++cache_size)  
  17.             factorial_cache[cache_size] = factorial_cache[cache_size - 1] * cache_size % mod;  
  18.         return factorial_cache[n];  
  19.     }  
  20. };  
  21. 来自 <https://leetcode-cn.com/problems/prime-arrangements/comments/>   
  22.      
  23.  正常解法,在每次乘的时候都取余  
  24.  public int numPrimeArrangements(int n) {  
  25.         if (n <= 1)  
  26.             return 1;  
  27.         int prime_count = 1;  
  28.         for (int i = 3; i <= n; i+=2) {  
  29.                 
  30.             boolean flag = false;  
  31.             for (int j = 2; j * j <= i; j++)  
  32.                 if (i % j == 0) {  
  33.                     flag = true;  
  34.                     break;  
  35.                 }  
  36.             prime_count += flag ? 0 : 1;  
  37.         }  
  38.         return (int)((getFactorial(prime_count) * getFactorial(n - prime_count))% 1000000007);  
  39.     }   
  40.     public long getFactorial(int n) {  
  41.         long res = 1;  
  42.         for (int i = 1; i <= n; i++)  
  43.             res = (res * i) % 1000000007;  
  44.         return res;  
  45.     }  
  46. 来自 <https://leetcode-cn.com/problems/prime-arrangements/comments/>   

   

    

   

for5种用法

20191014

15:09

  • #include <algorithm>
  • #include <vector>
  • //////////////////////////////////////////////
  • int nArray[] = {0, 1, 2, 3, 4, 5};
  • std::vector<int> vecNum(nArray, nArray + 6);
  • CString strText;
  • // 第一种用法:最原始的语法(用下标)
  • for (size_t i = 0; i < vecNum.size(); ++i)
  • {
  • strText.Format("%d", nArray[i]);
  • AfxMessageBox(strText);
  • }
  • // 第二种用法:最原始的语法(用迭代器)
  • for (auto it = vecNum.begin(); it != vecNum.end(); ++it)
  • {
  • strText.Format("%d", *it);
  • AfxMessageBox(strText);
  • }
  • // 第三种用法:简化数组遍历语法(从vs2008开始支持)
  • for each(auto item in vecNum)
  • {
  • strText.Format("%d", item);
  • AfxMessageBox(strText);
  • }
  • // 第四种用法:STL函数
  • std::for_each(vecNum.begin(), vecNum.end(), [](int item){
  • CString strText;
  • strText.Format("%d", item);
  • AfxMessageBox(strText);
  • });
  • // 第五种用法:C++11新增加的(VS2012支持)
  • for(auto item : vecNum)
  • {
  • strText.Format("%d", item);
  • AfxMessageBox(strText);

       

       

    来自 <https://blog.csdn.net/erinapple/article/details/84193841>

   

   

   

错误的集合

20191022

17:37

用总数减去总数来求被覆盖的数!!妙

  1. class Solution {    
  2. public:    
  3.     vector<int> findErrorNums(vector<int>& nums) {    
  4.         int res[10001]{0};    
  5.         int sum=0;    
  6.         int emt=0,rep=0,n=nums.size();    
  7.         for(int i=0;i<nums.size();i++)    
  8.         {    
  9.            if((++res[nums[i]])>1) rep=nums[i];     
  10.             sum+=nums[i];    
  11.                   
  12.         }    
  13.          emt =(1+n)*n/2-sum+rep;    
  14.         return{rep,emt};    
  15.               
  16.     }    
  17. };    
  18. static const auto io_speed_up=[]{    
  19.      ios::sync_with_stdio(false);    
  20.      cin.tie(0);    
  21.      return 0;    
  22. }();     

来自 <http://www.planetb.ca/projects/syntaxHighlighter/popup.php>

   

   

符号优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[整型表达式]

左到右

  

  

()

圆括号

(表达式)/函数名(形参表)

  

  

  

.

成员选择(对象)

对象.成员名

  

  

  

->

成员选择(指针)

对象指针->成员名

  

  

2

-

负号运算符

-算术类型表达式

右到左

单目运算符

  

(type)

强制类型转换

(纯量数据类型)纯量表达式

  

  

  

++

自增运算符

++纯量类型可修改左值表达式

  

单目运算符

  

--

自减运算符

--纯量类型可修改左值表达式

  

单目运算符

  

*

取值运算符

*指针类型表达式

  

单目运算符

  

&

取地址运算符

&表达式

  

单目运算符

  

!

逻辑非运算符

!纯量类型表达式

  

单目运算符

  

~

按位取反运算符

~整型表达式

  

单目运算符

  

sizeof

长度运算符

sizeof 表达式

sizeof(类型)

  

  

3

/

表达式/表达式

左到右

双目运算符

  

*

表达式*表达式

  

双目运算符

  

%

余数(取模)

整型表达式%整型表达式

  

双目运算符

4

+

表达式+表达式

左到右

双目运算符

  

-

表达式-表达式

  

双目运算符

5

<<

左移

整型表达式<<整型表达式

左到右

双目运算符

  

>>

右移

整型表达式>>整型表达式

  

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

  

>=

大于等于

表达式>=表达式

  

双目运算符

  

<

小于

表达式<表达式

  

双目运算符

  

<=

小于等于

表达式<=表达式

  

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

  

!=

不等于

表达式!= 表达式

  

双目运算符

8

&

按位与

整型表达式&整型表达式

左到右

双目运算符

9

^

按位异或

整型表达式^整型表达式

左到右

双目运算符

10

|

按位或

整型表达式|整型表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

可修改左值表达式=表达式

右到左

  

  

/=

除后赋值

可修改左值表达式/=表达式

  

  

  

*=

乘后赋值

可修改左值表达式*=表达式

  

  

  

%=

取模后赋值

可修改左值表达式%=表达式

  

  

  

+=

加后赋值

可修改左值表达式+=表达式

  

  

  

-=

减后赋值

可修改左值表达式-=表达式

  

  

  

<<=

左移后赋值

可修改左值表达式<<=表达式

  

  

  

>>=

右移后赋值

可修改左值表达式>>=表达式

  

  

  

&=

按位与后赋值

可修改左值表达式&=表达式

  

  

  

^=

按位异或后赋值

可修改左值表达式^=表达式

  

  

  

|=

按位或后赋值

可修改左值表达式|=表达式

  

  

15

,

逗号运算符

表达式,表达式,

左到右

从左向右顺序结合

   

来自 <https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin>

  

原文地址:https://www.cnblogs.com/xukaiae86/p/11721546.html