![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
面试题
新名字的故事
这个作者很懒,什么都没留下…
展开
-
leetcode 面试题19 正则表达式
解题思路:采用递归的思路,具体来说,对于当前待匹配的字符,首先判断下一个字符是不是"",根据有无"“可以分为两种情况:(1)下一个字符不是”*",如果要匹配要么模式串和...原创 2020-05-05 13:06:03 · 103 阅读 · 0 评论 -
leetcode 面试题64 求1+2+…+n
解题思路:递归class Solution: res = 0 def sumNums(self, n: int) -> int: self.res += n n and self.sumNums(n-1) return self.res原创 2020-05-15 21:17:05 · 104 阅读 · 0 评论 -
leetcode 面试题56-II 数组中数字出现的次数
解题思路:统计数组中所有数每一个比特位上的1加起来的个数,然后对3求余,就得到了只出现了一次的那个数的各个比特位上具体是0还是1class Solution: def singleNumber(self, nums: List[int]) -> int: res = [0] * 31 for i in range(31): tmp = 0 for x in nums: tmp +=原创 2020-05-15 20:39:29 · 99 阅读 · 0 评论 -
leetcode 面试题56-I 数组中数字出现的次数
解题思路:主要运行如下两个规律(1)任何数和零异或得到原数(2)两个相等的数异或为零,整个数组异或后得到两个不同的数(a, b)的异或值,然后找到最右边a和b不同的位,利用这一位上的0和1将数组的数分为两组进行异或,相同的数肯定会被分到同一组,然后异或之后又为零,所以最后的保留下来的就是原来两个不相等的数class Solution: def singleNumbers(self, nums: List[int]) -> List[int]: res = []原创 2020-05-15 19:36:31 · 123 阅读 · 0 评论 -
leetcode 面试题47 礼物的最大值
解题思路:一开始是想用dfs,结果超出时间限制,就改为动态规划,右下角点只能通过它上方或者左边的点达到,只要求得这两个未知的最大值即可,一直递推到最开始,所以我们只要一次求出每个位置的最大值即可,状态转移方程为:dp[i][j]=max(dp[i][j-1],dp[i-1][j])+grid[i][j],代码如下:class Solution: def maxValue(self, grid: List[List[int]]) -> int: m = len(grid)原创 2020-05-14 16:06:18 · 206 阅读 · 0 评论 -
leetcode 面试题63 股票的最大利润
解题思路:动态规划,dp[i]表示第i天卖出可以获得的最大利润,买入是包括i以及i前面的任意一天,最大利润就是dp[i]中的最大值,状态转移方程为dp[i]={0dp[i−1]+prices[i]−prices[i−1]<0dp[i−1]+prices[i]−prices[i−1]othersdp[i]=\left\{\begin{array}{lr}0\quad dp[i-1]+prices[i]-prices[i-1] <0\\dp[i-1]+prices[i]-prices[i-1]原创 2020-05-14 12:16:35 · 179 阅读 · 0 评论 -
leetcod 面试题49 丑数
解题思路:因为丑数只能被2,3,5整除,那么只要用已有的丑数乘以2,3,5就可以得到新的丑数,但是不能依次添加靠前面的数乘以2,3,5,再添加后面的数乘以2,3,5,因为会出现前面的积比后面的积结果更大的情况,例如3 * 3 > 4 * 2,所以用三个指针选择合适的数添加到丑数序列中,这样既可以做到每个数乘以2,3,5的积都有添加进来,又可以以正确而且不重复的顺序添加,代码如下:class Solution: def nthUglyNumber(self, n: int) -> int原创 2020-05-14 11:42:12 · 76 阅读 · 0 评论 -
leetcode 面试题46把数字翻译成字符串
解题思路:动态规划,(1)得到num的每一位数字,从低位到高位用nums保存(2)从低位到高位依次求解,状态转移方程如下:dp[i]={dp[i−1]+dp[i−2]10≤(nums[i]∗10+nums[i−1)<26dp[i−1]othersdp[i]=\left\{\begin{array}{lr}dp[i-1]+dp[i-2]&10\leq(nums[i]*10+nums[i-1)<26\\dp[i-1] &others\end{array}\right.dp原创 2020-05-10 10:37:55 · 133 阅读 · 0 评论 -
leetcode 面试题45 把数组排成最小的数
解题思路:这道题的关键就在于如何重新定义排序规则,对待排序的字符串x和y,如果(x+y)构成的字符串小于(y+x)构成的字符串,自然x应当排在y前面,反之亦然class Solution: def minNumber(self, nums: List[int]) -> str: def cmp(x, y): if (x+y) > (y+x): return 1 elif (x+y) <原创 2020-05-10 09:50:07 · 128 阅读 · 0 评论