在某个可能的解的集合中,按某个顺序依次检索元素,用题目给定的条件进行校验和计算。
是否存在,找到第一个,全部都,全部都不。

原数组中是否存在子数组?(元素无需连续,但需保持相对顺序一致)

templata<typename T>
bool subMatch(const T&arr,const T&target){
size_t idx=0;
for (auto &elem : arr)
{
if(elem==target[idx])
{
if(++idx == target.size())
return true;
}
}
return false;
}

寻找第K小的素数?

for(int idx=1;;idx++)
{
if(isPrime(idx))
cnt++;
if(cnt==k)
{
cout<<idx;
break;
}
}

枚举的优化:裁剪枚举集

判断一个数是否为素数?

for(int i=2;i<=n-1;i++)
{
if(n%i == 0)
return false;
}

根据数学特性可以缩小枚举范围

for(int i=2;i<=sqrt(n);i++)
{
if(n%i == 0)
return false;
}

按位枚举:
比如枚举十进制数1234的每一位

while(x){
int dight = x % 10;
// do something
x /=10;
}

对于将十进制整数 x 转换为 base 进制的各位数字,把10改为对应的进制数

vector<int> arr1;
while(x){
int dight = x % base;
arr1.push_back(dight);
x /=base;
}

base 进制的逆序数字转换回十进制整数

int x=0;
for(int i=arr1.size()-1;i>=0;i--)
{
x = x * base +arr1[i];
}
return x;