本次题解包括
- Stickers to Spell Word
- Binary Number with Alternating Bits
- Number of Distinct Islands
- Max Area of Island
691. Stickers to Spell Word
We are given N different types of stickers. Each sticker has a lowercase English word on it.
You would like to spell out the given
target
string by cutting individual letters from your collection of stickers and rearranging them.You can use each sticker more than once if you want, and you have infinite quantities of each sticker.
What is the minimum number of stickers that you need to spell out the
target
? If the task is impossible, return -1.Example 1:
Input:
1 ["with", "example", "science"], "thehat"Output:
1 3Explanation:
1
2
3 We can use 2 "with" stickers, and 1 "example" sticker.
After cutting and rearrange the letters of those stickers, we can form the target "thehat".
Also, this is the minimum number of stickers necessary to form the target string.Example 2:
Input:
1 ["notice", "possible"], "basicbasic"Output:
1 -1Explanation:
1 We can't form the target "basicbasic" from cutting letters from the given stickers.Note:
stickers
has length in the range[1, 50]
.stickers
consists of lowercase English words (without apostrophes).target
has length in the range[1, 15]
, and consists of lowercase English letters.- In all test cases, all words were chosen randomly from the 1000 most common US English words, and the target was chosen as a concatenation of two random words.
- The time limit may be more challenging than usual. It is expected that a 50 sticker test case can be solved within 35ms on average.
题目地址:leetcode Stickers to Spell Word
题目大意:给定n个stickers,每个stickers可以使用无数次。现在要将stickers拼成target(就是拆分stickers中的字母来凑成target),求用最少的使用次数(使用同一个sticker两次次数算2)使得stickers可以组成target。
思路:
这题对时间要求很高。
要注意剪枝。很重要的一点就是只保留target的字符,然后去除被包含的所有stickers.
比如target为abc,stickers=['afg','abf']只保留stickers=['a','ab'],第一个被第二个包含,因此stickers=['ab'],这样能保证结果不差,而需要搜索的空间大大减少。
然后BFS即可。
python BFS
1 | class Solution: |
DFS + 记忆化搜索超时了。。
1 | class Solution: |
693. Binary Number with Alternating Bits
Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.
Example 1:
1
2
3
4 Input: 5
Output: True
Explanation:
The binary representation of 5 is: 101Example 2:
1
2
3
4 Input: 7
Output: False
Explanation
The binary representation of 7 is: 111.Example 3:
1
2
3
4 Input: 11
Output: False
Explanation:
The binary representation of 11 is: 1011.Example 4:
1
2
3
4 Input: 10
Output: True
Explanation:
The binary representation of 10 is: 1010.
题目地址:leetcode Binary Number with Alternating Bits
题目大意:给定一个数字,判断其是否1和0交替出现
思路
方法一
直接移位判断
1 | class Solution: |
方法二:
位运算,如果一个数是交替出现的,那么t = n ^ (n >> 1)必全部为1. 因此 如果(t + 1) & t为0,那么说明为交替出现。
1 | class Solution(object): |
695. Max Area of Island
Given a non-empty 2D array
grid
of 0's and 1's, an island is a group of1
's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)
Example 1:
1
2
3
4
5
6
7
8 [[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]Given the above grid, return
6
. Note the answer is not 11, because the island must be connected 4-directionally.Example 2:
1 [[0,0,0,0,0,0,0,0]]Given the above grid, return
0
.Note: The length of each dimension in the given
grid
does not exceed 50.
题目地址:leetcode Max Area of Island
题目大意:给你一个二维数组,小岛用1表示,求小岛的个数。
思路
dfs即可
1 | class Solution: |
694. Number of Distinct Islands
Given a non-empty 2D array
grid
of 0's and 1's, an island is a group of1
's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.Count the number of distinct islands. An island is considered to be the same as another if and only if one island can be translated (and not rotated or reflected) to equal the other.
Example 1:
1
2
3
4 11000
11000
00011
00011Given the above grid map, return
1
.Example 2:
1
2
3
4 11011
10000
00001
11011Given the above grid map, return
3
.Notice that:
1
2 11
1and
1
2 1
11are considered different island shapes, because we do not consider reflection / rotation.
Note: The length of each dimension in the given
grid
does not exceed 50.
题目地址:leetcode Number of Distinct Islands
题目大意:和上面一题差不多。求独特的小岛的个数。独特的为不能经过平移得到的(即形状不同)
思路:
DFS,然后hash记录小岛形状。
平移的话可以记录各个小岛的每个点相对于该小岛的最左上角的偏移,然后最左上角移动到(0,0)
1 | class Solution: |
本文是leetcode如下的题解
- Stickers to Spell Word
- Binary Number with Alternating Bits
- Number of Distinct Islands
- Max Area of Island
更多题解可以查看: https://www.hrwhisper.me/leetcode-algorithm-solution/