bool areNumbersAscending(string s) {
int pre = INT_MIN;
for (int i = 0; i < s.size(); ++i) {
if (s[i] >= '0' && s[i] <= '9') {
int n = num(s, i);
if (n <= pre) return false;
pre = n;
}
}
return true;
}
};
首先一拿到这个题目: 就不断地提取题意: 然后的读取到子集出现地时候基本就想到了多半是可以利用搜索找
出所有地可能地题目了: 然后继续读取: 思路 渐渐清晰, 就是 利用深搜 去 枚举所有地情况 然后
不断地在期间维护一个位或操作可以获取地最大值,每一次跟新位或操作最大值地时候说明了出现了新的最值,
就从新计数满足位或结果是最值地情况.....
一般来说这种数组写深度搜索找子答案地题目 我们因为做过很多回了 所以大体地函数递归框架大家都是知道
地,就是一般要传入数组下标 递归边界就是 当 下标越界地时候 或者满足要求地时候:
但是这个题目 还是 存在 一个 很大地坑: 就是我们可能出现计算重复地 结果: 就是说一个nums[ind]
我们不取地时候其实 不取一次 和 连续不取n 次其实是一样地本质: 所以这个时候我们自然 需要维护
一下这些连续不取nums[ind]地情况 不让其 重复计数 : 我此处采取地策略是 加上 一个 bool值进行
标记
class Solution {
unordered_map<int, int> cnt; //记录所有的元素
int ans;
int max;
int count;
void dfs(vector<int>& nums, int ind, int tmp, bool flags) {
if (tmp > max) {
max = tmp; //跟新max
ans = 1;
} else if (tmp == max && flags) ans += 1;
//然后才是获取 tmp 开始的操作
if (ind >= nums.size()) return ;
dfs(nums, ind + 1, tmp | nums[ind], true); //取nums[ind]
dfs(nums, ind + 1, tmp, false); //不取出nums[ind],一直不取和之前
是同样的情况