本文记录一下本身在leetcode刷题过程当中遇到的经常使用问题的实现方式或者经常使用的知识点,参考的都是比较官方、比较正确、效率较高的实现方式。相似于高中数学的笔记本,记一些经常使用的解题技巧,有助于提高作题速度。本文长期更新,但愿本文不要“太监”。git
''' 每次循环获得x的一位上的数,从右往左。 实际实现时,每次循环可把digit放到数组里。 ''' while(x != 0){ digit= x % 10; x /= 10; }
''' 每次循环取出存在数组里的一位上的数, 若是想原顺序,从数组中取一位上的数digit时,就从左往右(在原数x上的顺序)。 若是想逆序,从数组中取一位的数digit时,就从右往左(在原数x上的顺序)。 ''' int rev = 0; for(循环条件){ rev = rev * 10 + digit }
C++数据类型的范围与系统与编译器有关,int类型至少占16bits,也就是范围至少为\([-2^{15},2^{15}-1]\)。在Visual Studio中,int占32bits,范围为\([-2^{31}, 2^{31}-1]\)。有多种方式实现int类型范围的使用。
(1)可直接在程序中定义int类型中的最大最小值:数组
int int_max = 0x7fffffff, int_min = 0x80000000;
因为int_max = int_min - 1,且int_min = int_max + 1,因此也可只定义一个,另外一个经过已定义的获得(LeetCode运行下面的定义方式会报错,不容许溢出计算)。如:spa
int int_max = 0x7fffffff, int_min = int_max + 1;
或:code
int int_min = 0x80000000, int_max = int_min - 1;
(2)<climits>(limits.h)
头文件中定义了特定系统和编译器对应的整型数据的的范围。可经过以下方式调用:leetcode
#include <climits> ... std::cout << INT_MAX << std::endl << INT_MIN << std::endl;
浮点类型数据的范围定义在<cfloat>(float.h)
头文件中。
(3) <limits>
头文件中定义了类模板numeric_limits
,包含了C++中全部算术类型(整型和浮点型)的相关信息。用numeric_limits
获得int类型的最大最小值方式以下:编译器
#include <limits> ... std::cout << std::numeric_limits<int>::max() << std::endl << std::numeric_limits<int>::min() << std::endl;