本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目
804.唯一摩尔斯密码词
题目大意
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如:
'a'对应".-",'b'对应"-...",'c'对应"-.-.",以此类推。
为了方便,所有 26 个英文字母的摩尔斯密码表如下:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。
- 例如,
"cab"可以写成"-.-..--...",(即"-.-."+".-"+"-..."字符串的结合)。我们将这样一个连接过程称作 单词翻译 。
对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。
样例
示例 1:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".
示例 2:
输入:words = ["a"]
输出:1
数据规模
提示:
1 <= words.length <= 1001 <= words[i].length <= 12words[i]由小写英文字母组成
思路
题目很简单,就是个字母每个字母对应了一个摩斯密码,然后把它们拼凑起来,看有多少种不同的摩斯密码,很显然用哈希表会很方便,如果C++就可以直接使用unordered_set<string>mp之类的。不过这类偏字符串形式的题目用python,那真是太舒服了,直接将莫斯表复制进去,然后用set来存结果,最后输出len(set)即可。
代码
class Solution:
def uniqueMorseRepresentations(self, words: List[str]) -> int:
l=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
ans=set([])
for word in words:
s=""
for i in range(len(word)):
s+=l[ord(word[i])-ord('a')]
ans.add(s)
return len(ans)
简化之后的代码:
class Solution:
def uniqueMorseRepresentations(self, words: List[str]) -> int:
l=[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
return len(set("".join(l[ord(x)-ord('a')] for x in word)for word in words))
题目
1716.计算力扣银行的钱
题目大意
Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。
最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。
给你 n ,请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。
样例
数据规模
思路
根据题意得规律:,所以可以每7个数字为一个循环,然后设置一个初始值依次为1,2,3(可以由(i-1)/7来判断)
代码
class Solution {
public:
int totalMoney(int n) {
int sum=0;
for(int i=1;i<=n;i++){
int t=(i-1)/7,x=i%7+(i%7==0)*7;
sum+=t+x;
}
return sum;
}
};