zoukankan      html  css  js  c++  java
  • 【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>

      

  • 相关阅读:
    SpringData JPA @Query动态SQL语句,且分页
    Springboot项目修改html后不需要重启---springboot项目的热部署
    sqlserver如何进行日期转换
    导入项目时候出现 Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.5错误
    Intellij IDEA和Eclipse之间的常用快捷键
    Java 集合转换(数组、List、Set、Map相互转换)
    oracle日期格式转换 to_date(),to_char()
    java数据缓存
    VMware14安装Centos8详细教程图解教程
    CentOS7 安装Xfce桌面环境
  • 原文地址:https://www.cnblogs.com/xukaiae86/p/11721546.html
Copyright © 2011-2022 走看看