打表找规律-灯泡状态数

题目:leetcode 672

There is a room with n lights which are turned on initially and 4 buttons on the wall. After performing exactly m unknown operations towards buttons, you need to return how many different kinds of status of the n lights could be.

Suppose n lights are labeled as number [1, 2, 3 ..., n], function of these 4 buttons are given below:

Flip all the lights.
Flip lights with even numbers.
Flip lights with odd numbers.
Flip lights with (3k + 1) numbers, k = 0, 1, 2, 

打表器

def go(li, op):
    if op == 0:
        ans = [1 ^ int(i) for i in li]
    if op == 1:
        ans = [1 ^ int(li[i]) if i % 2 == 0 else li[i] for i in range(len(li))]
    if op == 2:
        ans = [1 ^ int(li[i]) if i % 2 == 1 else li[i] for i in range(len(li))]
    if op == 3:
        ans = [1 ^ int(li[i]) if i % 3 == 0 else li[i] for i in range(len(li))]
    return ''.join(map(lambda x:str(x),ans))


def flipLights(n, m):
    """
    :type n: int
    :type m: int
    :rtype: int
    """
    ans = set()
    ans.add('1' * n)
    for i in range(m): 
        temp = set()
        for x in ans:
            for i in range(4):
                son = go(x, i)
                temp.add(son)
        ans = temp
    return len(ans)


for n in range(1, 100):
    for m in range(1, 100):
        print(flipLights(n, m), end=' ')
    print()

最终结果

        if m==0:return 1
        elif n==1:
            return 2
        elif n==2:
            if m==1:
                return 3
            else:
                return 4
        else:
            if m==1:
                return 4
            elif m==2:
                return 7
            else:return 8

转载于:https://www.cnblogs.com/weiyinfu/p/7469165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值