LeetCode第361场周赛
统计对称整数的数目 简单
给你两个正整数 low
和 high
。
对于一个由 2 * n
位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字之和相等,则认为这个数字是一个对称整数。
返回在 [low, high]
范围内的 对称整数的数目 。
示例 1:
输入:low = 1, high = 100
输出:9
解释:在 1 到 100 范围内共有 9 个对称整数:11、22、33、44、55、66、77、88 和 99 。
示例 2:
输入:low = 1200, high = 1230
输出:4
解释:在 1200 到 1230 范围内共有 4 个对称整数:1203、1212、1221 和 1230 。
提示:
1 <= low <= high <= 10^4
分析: 只需要考虑数字位数为偶数的数,遍历之后模拟一下就可以了。
代码:
class Solution {
public:
int countSymmetricIntegers(int low, int high) {
int a=0,b=0,ans=0;
for(int i=low;i<=high;i++){
if(!( (10<=i&&i<=99) || (1000<=i&&i<=9999) )) continue;
int l=0,ans_a=0,ans_b=0,j=i;
vector<int> v;
while(j){
v.push_back(j%10);
j/=10;
l++;
}
for(int p=0;p<l;p++){
if(p<l/2) ans_a+=v[p];
else ans_b+=v[p];
}
if(ans_a==ans_b) ans++;
}
return ans;
}
};
生成特殊数字的最少操作 中等
给你一个下标从 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 <= 100
num
仅由数字'0'
到'9'
组成num
不含任何前导零
分析: 能被25
整除的数,最后两位数只有以下四种可能:00
、25
、50
、75
。因此想要得到特殊数字,方案即为:将最后两位数变成以上四种可能的某一种(如果能得到多个方案,选择操作步骤最少的)。
如果不能得到以上结果,则判断是否含0
。如果包含0
,则删除除0
外的所有数(即数字位数-1);如果不包含,则全部删除。
代码:
class Solution {
public:
int get(string& num, vector<int>& v){
int index=0,ans=0;
vector<int> vv;
for(int i=num.length();i>=0;i--){
if(index>=2) break;
if(num[i]==v[index]){
index++;
vv.push_back(i);
}
}
if(index<2) return 150;
return num.length()-vv[0]+vv[0]-vv[1]-2;
}
bool haveZero(string& num){
for(int i=0;i<num.length();i++){
if(num[i]=='0')return true;
}
return false;
}
int minimumOperations(string num) {
int ans=110;
vector<vector<int>> v ={{'0','0'},{'0','5'},{'5','2'},{'5','7'}};
for(int i=0;i<v.size();i++){
int a = get(num, v[i]);
ans=min(ans, a);
}
if(ans==110){
if(haveZero(num)) return num.length()-1;
return num.length();
}
return ans;
}
};
后面两题目前还没有写!