力扣160场周赛[链接][https://leetcode-cn.com/contest/weekly-contest-160/]
菜过三题,终于涨分了,哈哈哈哈哈哈哈哈!!!
第一题:日常签到
5238. 找出给定方程的正整数解
给出一个函数 f(x, y)
和一个目标结果 z
,请你计算方程 f(x,y) == z
所有可能的正整数 数对 x
和 y
。
给定函数是严格单调的,也就是说:
f(x, y) < f(x + 1, y)
f(x, y) < f(x, y + 1)
函数接口定义如下:
1 | interface CustomFunction { |
如果你想自定义测试,你可以输入整数 function_id
和一个目标结果 z
作为输入,其中 function_id
表示一个隐藏函数列表中的一个函数编号,题目只会告诉你列表中的 2
个函数。
你可以将满足条件的 结果数对 按任意顺序返回。
示例 1:
1 | 输入:function_id = 1, z = 5 |
示例 2:
1 | 输入:function_id = 2, z = 5 |
提示:
1 <= function_id <= 9
1 <= z <= 100
- 题目保证
f(x, y) == z
的解处于1 <= x, y <= 1000
的范围内。 - 在
1 <= x, y <= 1000
的前提下,题目保证f(x, y)
是一个 32 位有符号整数。
算法分析
无脑暴力,可以过;快一点的算法可以二分;滑稽
C++代码
1 | /* |
Java代码
1 | /* |
第二题:格雷码的应用
5239. 循环码排列
给你两个整数 n
和 start
。你的任务是返回任意 (0,1,2,,...,2^n-1)
的排列 p
,并且满足:
p[0] = start
p[i]
和p[i+1]
的二进制表示形式只有一位不同p[0]
和p[2^n -1]
的二进制表示形式也只有一位不同
示例 1:
1 | 输入:n = 2, start = 3 |
示例 2:
1 | 输出:n = 3, start = 2 |
提示:
1 <= n <= 16
0 <= start < 2^n
算法描述
有一个特别简便的格雷码的生成函数,直接转换为十进制的那种,比赛的时候不知道,我的做法现将格雷码当作字符串存放,再将二进制的字符串转换成十进制数,最后按要求输出即可。
这一题知道题目的意思后就简单了,如果读不懂题意就难了!!
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |
第三题:字符串处理
5240. 串联字符串的最大长度
给定一个字符串数组 arr
,字符串 s
是将 arr
某一子序列字符串连接所得的字符串,如果 s
中的每一个字符都只出现过一次,那么它就是一个可行解。
请返回所有可行解 s
中最长长度。
示例 1:
1 | 输入:arr = ["un","iq","ue"] |
示例 2:
1 | 输入:arr = ["cha","r","act","ers"] |
示例 3:
1 | 输入:arr = ["abcdefghijklmnopqrstuvwxyz"] |
提示:
1 <= arr.length <= 16
1 <= arr[i].length <= 26
arr[i]
中只含有小写英文字母
算法描述
暴力解法,每个字符串都跑一遍所有的字符串,用set
来存放当前有的字符,每次添加都需要判断是否有相同字符,有的话直接跳出;这个操作有多处用到:
- 第一个字符串时遇到相同字符,清空
set
,跳过本次循环 - 添加字符串时,遇到相同的字符串,要把之前加入到
set
中的字符弹出,再继续遍历
这题最容易想到的就是暴力了,代码复杂度还行,就是要注意细节,我是wa
了二次;
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |
第四题:论问题(有研究表明)
5241. 铺瓷砖
你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。
房子的客厅大小为 n
x m
,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。
假设正方形瓷砖的规格不限,边长都是整数。
请你帮设计师计算一下,最少需要用到多少块方形瓷砖?
示例 1:
1 | 输入:n = 2, m = 3 |
示例 2:
1 | 输入:n = 5, m = 8 |
示例 3:
1 | 输入:n = 11, m = 13 |
提示:
1 <= n <= 13
1 <= m <= 13
算法描述
附上生成函数:
1 |
|
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |