吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1412|回复: 20
收起左侧

[讨论] 有个算法题,有没有人能提出好点算法

[复制链接]
badyun 发表于 2021-10-31 18:42
题目是一段数字只包含0,1,2

其中2代表0或者1

随机输入这样的一串数字,把其中的2替换成0或者1,要求输出所有可能的结果

比如

输入:121,返回101和111

输入:122,返回100,101,111,110

需要用算法实现输入任意长度的012,返回所有的可能

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

摸鱼怪 发表于 2021-10-31 19:01

回帖奖励 +5 CB吾爱币

不懂,感谢楼主的cb

免费评分

参与人数 1吾爱币 -10 收起 理由
苏紫方璇 -10 本区请勿发布与问题无关的回复

查看全部评分

平淡最真 发表于 2021-10-31 19:01
先计算2的个数,记录位置。然后总的可能性就是000...000-111...111   这不就是2进制吗     从小往大一个一个写出来。然后把原本的0和1插回去

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mzq123000 + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| badyun 发表于 2021-10-31 19:09
平淡最真 发表于 2021-10-31 19:01
先计算2的个数,记录位置。然后总的可能性就是000...000-111...111   这不就是2进制吗     从小往大一个一 ...

要求性能尽可能高。我自己的算法用了三个循环,感觉还能优化
wihn 发表于 2021-10-31 19:27
用两个位来表示0~2,逢三进一,依次输出
0000,0001,0010,0100..........
用二进制的两位模拟三进制
行不行?
wihn 发表于 2021-10-31 19:29
wihn 发表于 2021-10-31 19:27
用两个位来表示0~2,逢三进一,依次输出
0000,0001,0010,0100..........
用二进制的两位模拟三进制

需要一个大循环,每次需要取余运算
搜索曾经的回忆 发表于 2021-10-31 19:31
典型dfs递归算法吧
hate 发表于 2021-10-31 19:36
ruby递归,性能,一般吧

[Ruby] 纯文本查看 复制代码
str = "0211112"

def concat(char, chars)
    if chars.size == 0
        return char == '2' ? ['0', '1'] : [char]
    end

    if char == '2'
        return concat('0', chars) + concat('1', chars)
    end
    
    concat(chars[0], chars[1..-1]).map do |str|
        char + str
    end
end

puts concat(str.chars[0], str.chars[1..-1])
kesai 发表于 2021-10-31 20:28
本帖最后由 kesai 于 2021-10-31 20:47 编辑

好久不写不太会了,O(∩_∩)O哈哈~,都不知道对不对了,哎,老了
[Python] 纯文本查看 复制代码
s='122'
res=[]
for c in s:
    if not res:
        res=[c] if c!='2' else ['0','1']
    else:
        res=list(map(lambda x:x+c,res)) if c!='2' else list(map(lambda x:x+'0',res))+list(map(lambda x:x+'1',res))
print(res)
往事随风不苦涩 发表于 2021-10-31 21:04
kesai 发表于 2021-10-31 20:28
好久不写不太会了,O(∩_∩)O哈哈~,都不知道对不对了,哎,老了
[mw_shl_code=python,true]s='122'
res= ...

可不可以试试构建二叉树,逢2就分叉,然后遍历由根节点到所有叶子节点的路径。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表