栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【LeetCode】2022 and 491

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【LeetCode】2022 and 491

2022. 将一维数组转变成二维数组



解法:索引
很常规的一道所引题,根据题目要求去模拟结果即可。

class Solution:
    def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:
        if len(original) != m*n:
            return []
        result = []
        for i in range(m):
            result.append(original[i*n:(i+1)*n])
        return result
491. 递增子序列


解法:DFS
通过DFS遍历得到所有的递增子序列,并对其进行过滤和去重,保留长度大于等于2的子序列,得到结果。

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        result = []
        def dfs(cur, temp):
            if len(temp) >= 2 and temp not in result:
                result.append(temp)
            if cur >= len(nums):
                return
            if len(temp)==0 or nums[cur] >= temp[-1]:
                dfs(cur+1, temp+[nums[cur]])
                dfs(cur+1, temp)
            else:
                dfs(cur+1, temp)
        dfs(0, [])
        return result

但该方法还有优化的空间,存在许多重复的情况,例如对于[4,6,7,7]遍历了第一个[4,6,7]情况后就无需在考虑第二个[4,6,7]的情况,故考虑进行剪枝来解决该问题。具体原理可参考官方解答
另外有关递归的编程技巧可参考递归编程技巧

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        result = []
        def dfs(cur, temp):
            # print(cur, temp)
            if cur == len(nums):
                if len(temp) >= 2:
                    result.append(temp)
                return
            if len(temp)==0 or nums[cur] >= temp[-1]:
                dfs(cur+1, temp+[nums[cur]])
                # dfs(cur+1, temp)
            if len(temp)==0 or nums[cur] != temp[-1]:
                
                dfs(cur+1, temp)
        dfs(0, [])
        return result
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号