三站合一的网站怎么做,互联网产品推广案例范文,东莞公司注册地址查询,天津建设协会网站首页给你一个下标从 0 开始的字符串 num #xff0c;表示一个非负整数。
在一次操作中#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意#xff0c;如果你删除 num 中的所有数字#xff0c;则 num 变为 0。
返回最少需要多少次操作可以使 num 变成特殊数字。
如…
给你一个下标从 0 开始的字符串 num 表示一个非负整数。
在一次操作中您可以选择 num 的任意一位数字并将其删除。请注意如果你删除 num 中的所有数字则 num 变为 0。
返回最少需要多少次操作可以使 num 变成特殊数字。
如果整数 x 能被 25 整除则该整数 x 被认为是特殊数字。
示例 1
输入num 2245047
输出2
解释删除数字 num[5] 和 num[6] 得到数字 22450 可以被 25 整除。
可以证明要使数字变成特殊数字最少需要删除 2 位数字。
示例 2
输入num 2908305
输出3
解释删除 num[3]、num[4] 和 num[6] 得到数字 2900 可以被 25 整除。
可以证明要使数字变成特殊数字最少需要删除 3 位数字。
示例 3
输入num 10
输出1
解释删除 num[0] 得到数字 0 可以被 25 整除。
可以证明要使数字变成特殊数字最少需要删除 1 位数字。提示
1 num.length 100num 仅由数字 0 到 9 组成num 不含任何前导零
今天的力扣每日一题比较有意思这个题的话还是需要有一些编程思维或者说数学思维才能想到的应该需要每天自己推理实践日积月累当然这个题如果在比赛中的话不算难题顶多是 签到题 中档题好了来一起看看吧
首先呢阅览一遍题目后我们可以发现的是如果num中包含了一个0,那么ans最多是n - 1n是num长度因为呢除了这个0其他全删了么
在来观察被25整除思考思考你会发现25 * 1 ~ n中的数他的后两位尾数是{25507500}只要能发现这个规律那这道题也就结束了当然想不到也没关系慢慢积累
那接下来就是两个指针i和j去遍历就行了把{25507500}存到哈希表里面如果key num[i] num[j]在哈希表里面找到了就去更新一次ans的值
代码
class Solution {
public:int minimumOperations(string num) {int n num.size(),ans 0x3f3f3f3f,flag 0;if(n 1 num[0] ! 0) return 1;else if(n 1 num[0] 0) return 0;unordered_mapstring,int hs;hs[00] 1,hs[25] 1,hs[50] 1,hs[75] 1;if(num.find(0) ! string::npos) ans min(ans,n - 1),flag 1;for(int i0;in;i){for(int ji1;jn;j){string key to_string(num[i] - 0) to_string(num[j] - 0);// cout key endl;if(hs.count(key)){// cout key endl;ans min(ans,n - i - 2);flag 1;}}}if(!flag) ans n;return ans;}
}; 这个地方解释一个像哈希表或者set之类用find函数一般找不到都是返回最后的那个空指针也就是.end(),在字符串中如果find函数没找到的话是返回string::npos的也就是-1代表找不到
加油