题目描述:

思路:

这道题目乍看之下没有特别适用的算法,于是尝试用深度优先的方法直接暴力搜索。根据题干描述,最后生成序列的长度为2n-1。为了满足第三个条件,在搜索过程中如果在当前位置(假设对应数字为i)填入除1以外的数字(假设为j),则可以在对应i+j位置同时填入j,这样最后得到的序列是满足第3个条件的。而为了满足字典序最大的条件,搜索数字时需要从n向2,从大到小搜索,这样得到的第一个序列就是题目所求序列。以上为基本思路。

在代码实现时,我踩过的坑主要有2个:

1.代码中递归调用到的地方有两处,其中第一处是当前位置部位不为空(即当前位置是之前搜索中已经填入的两个位置中的后面一个),这种情况可以直接搜索下一个位置,但是需要注意在当前递归函数搜索完成,进入下一步时需要先验证一下当前位置是否为空。如果不为空说明该位置仍然是之前已经填入过的位置,这种情况说明前面的尝试失败,应该直接返回,不进入之后的搜索过程。如果此处再进行修改则会导致不符合第三个条件。

2.在第二个递归调用的地方,如果当前选择的数字不是1,则应该同时复原两个位置为空。如果只复原一个同样会造成前后不一的情况

代码

class Solution:def constructDistancedSequence(self, n: int) -> List[int]:if n==1:return [1]vis=[False for i in range(2*n-1)]temp=['' for i in range(2*n-1)]ans=[]flag=Falsedef dfs(cur):nonlocal vis,n,ans,temp,flagif flag:returnif cur==2*n-1:ans=copy.deepcopy(temp)flag=Truereturnif temp[cur]!='':dfs(cur+1)if temp[cur]!='':returnfor i in range(n,0,-1):if not vis[i]:if i==1:temp[cur]=ielse:if cur+i>=2*n-1:continueif temp[cur+i]!='':continuetemp[cur]=itemp[cur+i]=iprint(temp,i)vis[i]=Truedfs(cur+1)vis[i]=Falseif i!=1:temp[cur+i]=''temp[cur]=''vis[i]=0dfs(0)return ans

Leetcode.1718 构建字典序最大的可行序列相关推荐

  1. LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,请你找到满足下面条件的一个序列: 整数 1 在序列中只出现一次. 2 到 n 之间每个整数都恰好出现两次. 对于每个 2 到 n 之间 ...

  2. Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜

    文章目录 题目 题目链接 题目 题目重述:给定一个数n,求一个长度为2n-1的序列:1只出现一次,2~n之间每个数出现2次,并且 对于2 ~n之间的每个数i,两个i之间相差为i,比如n=3,[3,1, ...

  3. 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字

    [LeetCode]剑指 Offer 44. 数字序列中某一位的数字 文章目录 [LeetCode]剑指 Offer 44. 数字序列中某一位的数字 package offer;public clas ...

  4. 创新工具|如何构建产品的最小可行架构(MVA)

    最小可行产品(MVP) 不仅需要考虑产品的市场可行性,还需要考虑其技术可行性,以便随着时间的推移满足不断变化的需求.将构建最小可行架构(MVA) 纳入 MVP 开发可以帮助团队评估技术可行性,为产品提 ...

  5. Leetcode.1641 统计字典序元音字符串的数目

    题目链接 Leetcode.1641 统计字典序元音字符串的数目 Rating : 1519 题目描述 给你一个整数 n,请返回长度为 n.仅由元音 (a, e, i, o, u)组成且按 字典序排列 ...

  6. LeetCode 1754. 构造字典序最大的合并字符串

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 word1 和 word2 . 你需要按下述方式构造一个新字符串 merge :如果 word1 或 word2 非空,选择 下面选项之一 ...

  7. LeetCode简单题之最长特殊序列 Ⅰ

    题目 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 .如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) ...

  8. LeetCode 1641. 统计字典序元音字符串的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请返回长度为 n .仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量. 字符串 s 按 字典序排列 需要满足 ...

  9. LeetCode 1061. 按字典序排列最小的等效字符串(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符. 举个例子,如果 A = "abc" 且 B = ...

最新文章

  1. 人工智能工程师学习路线
  2. Python 技术篇-百度语音API鉴权认证获取Access Token实例演示
  3. QQ空间Python爬虫v2.0--点赞数据分析
  4. Unity 5 来了!引领开发引擎进入次时代
  5. Linux打开rtf文档,在linux下设置开机自动启动程序的方法_精品.rtf
  6. Java里面static, final, this, super, 代码块, 单例模式
  7. USACO-Section1.2 Broken Necklace (枚举法)
  8. open() 函数以 w+ 模式打开文件
  9. 瑞丽,边陲的旖旎风情
  10. 【题集】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
  11. 不用写代码的可视化大屏,一口气把工具和方法都教给你
  12. python怎么安装xlutils_Python3安装xlutils
  13. 小学生学计算机动画,小学生电脑绘画软件_电脑绘画之“卡通小熊”
  14. QCustomplot绘图性能的改善
  15. 常用的几种视频格式(最详细的解释)
  16. OA办公系统审批流程是什么?
  17. java小白,随意给出一个三位数的整数,打印显示它的个位数,十位数,百位数的值。
  18. wpf之Binging类
  19. 工业物联网案例:城市供水管网渗漏监测预警系统
  20. 使用Godaddy的API批量修改域名的NameServers,指向CloudFlare的NS,享受免费的抗DDOS保护!

热门文章

  1. python calu()函数_python面向对象
  2. 【学习笔记】:Multi-mode Transformer Transducer with Stochastic Future Context
  3. SCT2430STER电池应用
  4. HNUCM信息科学与工程学院第二届新生赛——正式赛
  5. 谷粒商城项目笔记总结(1/2)
  6. 先进过程控制之一:浅说APC
  7. 相约,一朵春天的微笑
  8. 【安卓基础】基于Android Studio的家庭理财通项目
  9. Lisp:AutoLisp入门、操作编程实例详细攻略
  10. input 只能输入正整数,包括 0