LeetCode--Unique Morse Code Words && Flipping an Image (Easy)
804. Unique Morse Code Words (Easy)#
International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: "a" maps to ".-", "b" maps to "-...", "c" maps to "-.-.", and so on.
For convenience, the full table for the 26 letters of the English alphabet is given below:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
Now, given a list of words, each word can be written as a concatenation of the Morse code of each letter. For example, "cba" can be written as "-.-..--...", (which is the concatenation "-.-." + "-..." + ".-"). We'll call such a concatenation, the transformation of a word.
Return the number of different transformations among all words we have.
Example:
Input: words = ["gin", "zen", "gig", "msg"]
Output: 2
Explanation:
The transformation of each word is:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
There are 2 different transformations, "--...-." and "--...--.".
Note:
The length of words will be at most 100.
Each words[i] will have length in range [1, 12].
words[i] will only consist of lowercase letters.
solution#
class Solution {
public int uniqueMorseRepresentations(String[] words) {
String[] alphamorse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
Set<String> transformation = new HashSet<String>();
for (int i=0; i<words.length; i++)
{
StringBuilder s = new StringBuilder();
for (int j=0; j<words[i].length(); j++)
s.append(alphamorse[words[i].charAt(j)-'a']);
transformation.add(s.toString());
}
return transformation.size();
}
}
总结##
此题思路是先将26个字母的morse code用一个String数组alphamorse存起来,然后再用一个HashSet变量transformation存储转化为morse code后的单词。接着外层循环依次遍历每个单词,此时需要新建一个StringBuilder变量s用来存储每个单词中的字母连接后的morse code。找到一个单词后,内层循环再遍历其每个字母;找到一个字母后,将这个字母与'a'相减,得到一个整数值,这个整数值代表这个字母在alphamorse中的下标。接着用s.append()将morse code存入s,内层循环结束后再s转变为字符串后存入transformation,直至外层循环结束。最后返回transformation的大小,即为所求。
Notes:
1.遍历String数组可以用for-each循环;
2.遍历字符串,可以将字符串转为字符数组后再用for-each循环
eg.
class Solution {
public int uniqueMorseRepresentations(String[] words) {
String[] d = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
HashSet<String> s = new HashSet<>();
for (String word : words) {
String code = "";
for (char c : word.toCharArray()) code += d[c - 'a'];
s.add(code);
}
return s.size();
}
}
832. Flipping an Image (Easy)#
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.
To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
Example 1:
Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
Example 2:
Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Notes:
1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1
solution#
我的解法
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
for (int i=0; i<A.length; i++)
{
int j = 0;
int k = A[i].length-1;
while(j < k)
{
int temp = A[i][j];
A[i][j] = A[i][k] ^ 1;
A[i][k] = temp ^ 1;
j++; k--;
}
if (j == k)
A[i][j] = A[i][j] ^ 1;
}
return A;
}
}
大佬的解法
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int n = A.length;
for (int[] row : A)
for (int i = 0; i * 2 < n; i++)
if (row[i] == row[n - i - 1])
row[i] = row[n - i - 1] ^= 1;
return A;
}
}
reference
https://leetcode.com/problems/flipping-an-image/discuss/130590/C%2B%2BJavaPython-Reverse-and-Toggle
总结##
此题思路很简单,先用一个外层循环遍历每个image,即取出一行,然后在一个内层while循环里面对一行里面的数字逆序,逆序时同时做异或运算。按照我的解法,内层循环结束后,此时要注意一行的长度可能为奇数或偶数,如果是奇数,则还要对一行中正中间的数字做异或运算,否则什么都不做。最后外层循环结束后,返回二维数组A即可。
Notes:
1.a^b为异或运算,相同得0,相异得1,比如 01=1,00=0;
2.注意数组长度与数组最后一个元素下标的关系;
LeetCode--Unique Morse Code Words && Flipping an Image (Easy)的更多相关文章
- [LeetCode] Unique Morse Code Words 独特的摩斯码单词
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- 【Leetcode】804. Unique Morse Code Words
Unique Morse Code Words Description International Morse Code defines a standard encoding where each ...
- 804. Unique Morse Code Words - LeetCode
Question 804. Unique Morse Code Words [".-","-...","-.-.","-..&qu ...
- Unique Morse Code Words
Algorithm [leetcode]Unique Morse Code Words https://leetcode.com/problems/unique-morse-code-words/ 1 ...
- 【Leetcode_easy】804. Unique Morse Code Words
problem 804. Unique Morse Code Words solution1: class Solution { public: int uniqueMorseRepresentati ...
- LeetCode 804. Unique Morse Code Words (唯一摩尔斯密码词)
题目标签:String 题目给了我们 对应每一个 字母的 morse 密码,让我们从words 中 找出 有几个不同的 morse code 组合. 然后只要遍历 words,把每一个word 转换成 ...
- [LeetCode] 804. Unique Morse Code Words 独特的摩斯码单词
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- 【LeetCode】804. Unique Morse Code Words 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 set + map set + 字典 日期 题目地 ...
- Leetcode 804. Unique Morse Code Words 莫尔斯电码重复问题
参考:https://blog.csdn.net/yuweiming70/article/details/79684433 题目描述: International Morse Code defines ...
随机推荐
- AJ学IOS(06)UI之iOS热门游戏_超级猜图
AJ分享,必须精品 先看效果图 思路 需求分析 1,搭建界面 1>上半部分,固定的,用Storyboard直接连线(OK) 2>下半部分,根据题目的变化,不断变化和调整,用代码方式实现比较 ...
- [一起读源码]走进C#并发队列ConcurrentQueue的内部世界 — .NET Core篇
在上一篇<走进C#并发队列ConcurrentQueue的内部世界>中解析了Framework下的ConcurrentQueue实现原理,经过抛砖引玉,得到了一众大佬的指点,找到了.NET ...
- spark——详解rdd常用的转化和行动操作
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark第三篇文章,我们继续来看RDD的一些操作. 我们前文说道在spark当中RDD的操作可以分为两种,一种是转化操作(trans ...
- ES6新特性箭头函数和常用function()对比
// 无参 var fn1 = function() {} var fn1 = () => {} // 单个参数 var fn2 = function(a) {} var fn2 = a =&g ...
- F - Distinct Numbers
链接:https://atcoder.jp/contests/abc143/tasks/abc143_f 题解:开两个数组,其中一个arr用来保存每个元素出现的次数,同时再开一个数组crr用来保存出现 ...
- 排序算法代码实现-Java
前言 为了准备面试,从2月开始将排序算法认认真真得刷了一遍,通过看书看视频,实践打代码,还有一部分的leetcode题,自己感觉也有点进步,将笔记记录总结发出来. 冒泡排序 该排序就是一种像泡泡浮到水 ...
- Linux系统安装docker教程-CentOS7(完美教程)
一.前言 最近有网友反应不在安装Linux 安装docker,为了方便大家更快的安装,以CentOS7安装为例,写了一篇比较简单的博客,让大家学习. 二.背景介绍 Linux,全称GNU/Linux ...
- C#反射(二)
长时间没有回顾反射知识了,今天就讲解一下反射的一般第二个用法. 二.对方法,属性等的反射 首先需要写一个测试类,生成.exe或.dll文件. class Test { public Test()/ ...
- 用Java代码来校验QQ号
校验qq号码: 1.要求必须是5-15位数字 2.0不能开头 分析: A:键盘录入一个qq号码 B:写一个功能实现校验 C:调用功能,输出结果. 代码实现:public class RegexDemo ...
- unset变量释放内存不起作用
unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间. 只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存.