zltzlt 发表于 2020-3-30 18:42:51

Python:每日一题 363

本帖最后由 zltzlt 于 2020-4-1 13:23 编辑

今天的题目:

有一个需要密码才能打开的保险箱。密码是 n 位数,密码的每一位是 k 位序列 0, 1, ..., k-1 中的一个 。

你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果匹配,则能够打开保险箱。

举个例子,假设密码是 "345",可以输入 "012345" 来打开它,只是你输入了 6 个字符。

返回能打开保险箱的并且字典序最小的字符串。

示例1:

输入:n = 1, k = 2
输出:"01"
说明:"10"也可以打开保险箱。
示例 2:

输入:n = 2, k = 2
输出:"00110"
说明:"01100", "10011", "11001" 也能打开保险箱。

{:10_298:}欢迎大家一起答题!{:10_298:}

kinkon 发表于 2020-3-30 19:00:52

有点晕,没看懂题型

BngThea 发表于 2020-3-30 19:09:05

示例1中为什么10也能打开?此时保存的不是最后一位0吗

永恒的蓝色梦想 发表于 2020-3-30 19:27:00

本帖最后由 永恒的蓝色梦想 于 2020-3-31 08:13 编辑

这道题的意思是让我们找出一个最短的能包含所有可能密码的字符串。

ouyunfu 发表于 2020-3-30 19:29:18

不懂,麻烦多发几个例子

永恒的蓝色梦想 发表于 2020-3-30 19:37:03

这题的描述就贼离谱,

March2615 发表于 2020-3-30 20:29:55

越来越看不懂题目了{:10_266:}

塔利班 发表于 2020-3-30 20:46:13

from itertools import product as p,permutations as pm
def f363(n,k):
    l=[]
    r=[]
    for e in p(*[''.join(map(str,range(k)))]*n):
      l.append(''.join(e))
    for e in pm(l,len(l)-1):
      s='0'*n
      for ee in e:
            if not s:
                s+=ee
            elif ee in s:
                continue
            else:
                for i in range(n):
                  if ee==s[-n+i:]:
                        s+=ee
                        break
                else:
                  s+=ee
      r.append(s)
    r.sort(key=lambda x:(len(x),x))
    return r
头大,写个超时的

zshill 发表于 2020-3-30 21:05:53

这还是密码箱吗?这么多密码都能开。。。

NOCHANGE 发表于 2020-3-30 21:06:38

看了视频前3P的过来看这个一脸懵逼

fan1993423 发表于 2020-3-30 22:03:16

就想问第二个列子输出0110,或者110是不是正确答案

TJBEST 发表于 2020-3-30 22:04:56

前排占位

TJBEST 发表于 2020-3-30 22:12:50

@zltzltk不会超过10吧

蒋博文 发表于 2020-3-30 22:58:31

zltzlt,亲爱的楼主,咱能不能把题目说清楚一点???我语文本来就不好的{:5_99:}

chenlei92 发表于 2020-3-31 00:23:11

我买的书,扫码二维码不能看视频,看到序列,函数这些视频都不能看 这是什么情况,文泉云盘的视频。

ouyunfu 发表于 2020-3-31 04:46:11

from itertools import product as p
def f363(n,k):
    keys=[]
    for e in p(*[''.join(map(str,range(k)))]*n):
      keys.append(''.join(e))
    res=''.join(keys)
    Flag=1
    while Flag:
      i=len(res)-1
      while True:
            if sum(+res) for k in keys])==0:
                res=res+res
                break
            else:
                i-=1
            if i==0:
                Flag=0
                break

    return res

永恒的蓝色梦想 发表于 2020-3-31 08:08:19

chenlei92 发表于 2020-3-31 00:23
我买的书,扫码二维码不能看视频,看到序列,函数这些视频都不能看 这是什么情况,文泉云盘的视频。

BILIBILI 搜 鱼C-小甲鱼

Chysial 发表于 2020-3-31 08:46:21

这个版块版主换了是吧,前年7月份的时候记得没有这么复杂,刚读题目都要想半天

永恒的蓝色梦想 发表于 2020-3-31 09:46:45

Chysial 发表于 2020-3-31 08:46
这个版块版主换了是吧,前年7月份的时候记得没有这么复杂,刚读题目都要想半天

这个版主是去年下半年上任的~
这个题目摘自leetcode,本身题目描述就有问题,不是版主的锅

_2_ 发表于 2020-3-31 13:14:42

Chysial 发表于 2020-3-31 08:46
这个版块版主换了是吧,前年7月份的时候记得没有这么复杂,刚读题目都要想半天

和我注册的时间差不多
页: [1] 2
查看完整版本: Python:每日一题 363