Q1.求出数字答案
给你三个 正 整数 num1
,num2
和 num3
。
数字 num1
,num2
和 num3
的数字答案 key
是一个四位数,定义如下:
- 一开始,如果有数字 少于 四位数,给它补 前导 0 。
- 答案
key
的第i
个数位(1 <= i <= 4
)为num1
,num2
和num3
第i
个数位中的 最小 值。
请你返回三个数字 没有 前导 0 的数字答案。
示例 1:
输入:num1 = 1, num2 = 10, num3 = 1000
输出:0
解释:
补前导 0 后,num1
变为 "0001"
,num2
变为 "0010"
,num3
保持不变,为 "1000"
。
- 数字答案
key
的第1
个数位为min(0, 0, 1)
。 - 数字答案
key
的第2
个数位为min(0, 0, 0)
。 - 数字答案
key
的第3
个数位为min(0, 1, 0)
。 - 数字答案
key
的第4
个数位为min(1, 0, 0)
。
所以数字答案为 "0000"
,也就是 0 。
示例 2:
输入: num1 = 987, num2 = 879, num3 = 798
输出:777
示例 3:
输入:num1 = 1, num2 = 2, num3 = 3
输出:1
提示:
1 <= num1, num2, num3 <= 9999
#include<iostream>
#include<string>
using namespace std;
int generateKey(int num1, int num2, int num3){
//将数字转换成字符串,前导零补充
string s1=to_string(num1);
string s2=to_string(num2);
string s3=to_string(num3);
// 或者是 s1.insert(0,4-s1.length(),'0');
while (s1.size()<4) s1="0"+s1;
while(s2.size()<4) s2="0"+s2;
while(s3.size()<4) s3="0"+s3;
string res;
//min
for(int i=0;i<4;i++){
char min_char=min(min(s1[i],s2[i]),s3[i] );
res+=min_char;
}
// 转换结果字符串为整数,去掉前导零
return stoi(res);
}
int main(){
int num1 = 987, num2 = 879, num3 = 798;
int res=generateKey(num1,num2,num3);
cout<<res<<endl;
return 0;
}
Q2.哈希分割字符串
给你一个长度为 n
的字符串 s
和一个整数 k
,n
是 k
的 倍数 。你的任务是将字符串 s
哈希为一个长度为 n / k
的新字符串 result
。
首先,将 s
分割成 n / k
个
子字符串
,每个子字符串的长度都为 k
。然后,将 result
初始化为一个 空 字符串。
我们依次从前往后处理每一个 子字符串 :
- 一个字符的 哈希值 是它在 字母表 中的下标(也就是
'a' → 0
,'b' → 1
,... ,'z' → 25
)。 - 将子字符串中字幕的 哈希值 求和。
- 将和对 26 取余,将结果记为
hashedChar
。 - 找到小写字母表中
hashedChar
对应的字符。 - 将该字符添加到
result
的末尾。
返回 result
。
示例 1:
输入:s = "abcd", k = 2
输出:"bf"
解释:
第一个字符串为 "ab"
,0 + 1 = 1
,1 % 26 = 1
,result[0] = 'b'
。
第二个字符串为: "cd"
,2 + 3 = 5
,5 % 26 = 5
,result[1] = 'f'
。
示例 2:
输入:s = "mxz", k = 3
输出:"i"
解释:
唯一的子字符串为 "mxz"
,12 + 23 + 25 = 60
,60 % 26 = 8
,result[0] = 'i'
。
提示:
1 <= k <= 100
k <= s.length <= 1000
s.length
能被k
整除。s
只含有小写英文字母。
#include<iostream>
#include<string>
using namespace std;
string stringHash(string s,int k){
string ans;
int n=s.length();
for(int i=0;i<n;i+=k){
int sum=0;
for(int j=0;j<k;j++){
sum+=s[i+j]-'a';
}
char temp='a'+(sum%26);
ans+=temp;
}
return ans;
}
int main(){
string s = "mxz";
int k = 3;
string ans = stringHash(s,k);
cout<<ans<<endl;
}
老实说,前两道就是简单思路题,还是可以很快写完
后面题就不想写了,唉