Rosalind刷题

原题链接

Rabbits and Recurrence Relations

斐波那契数列 n=31,k=5时,兔子个数(n第几个月,k每对兔子可以生多少对兔子)

fib(n::Int, k::Int) = n < 3 ? 1 : k * fib(n-2,k)+fib(n-1,k)

fib(31,5)

每次用2个函数相加递归开销太大了,还是建议用循环

1 个赞

欢迎分享针对特定问题的Julia实现。如果可能的话,可以考虑把你想分享的内容整合在同一个帖子下面,方便大家浏览。

1 个赞

另外一个类似的项目是 LeetCode.jl

GitHub - JuliaCN/LeetCode.jl: A community driven project to provide solutions for LeetCode problems in the Julia programming language. 和配套的问题/答案链接 Home · LeetCode

1 个赞

从算法角度,斐波那契数列应该用动态规划,O(N) 时间,O(1) 内存。参看 LeetCode.jl-509

# Indigo
function fib(n::Int)::Int
    n <= 1 && return n
    pre, cur = 0, 1
    for _ in 2:n
        pre, cur = cur, pre + cur
    end
    return cur
end

非常欢迎分享和交流题解 :laughing:
推荐试试上边提到的 LeetCode.jl,能学到不少技巧,再回头刷 Rosalind 的题说不定事半功倍~
目前仓库题解500+,有很多补充空间(还能蹭个贡献者 :smiley:


这题 mapcollect 似乎多余了?比如直接写

hd(s1::String, s2::String) = count(i->s1[i]!=s2[i], eachindex(s1))
1 个赞

贴一道很有意思的题目,这种解法似乎只有 Julia 能这么干 :rofl:


原题链接:LeetCode-917-仅仅翻转字母
简述:将英文字母反转,非英文字母保留在原有位置。
示例: "Test1ng-Leet=code-Q!" => "Qedo1ct-eeLg=ntse-T!"

Julia 代码

function reverse_only_letters(s::String)
    chars = collect(s)
    reverse!(@view(chars[isletter.(chars)]))
    return join(chars)
end

函数第二行将英文字母原地反转,简洁无废话。。。

1 个赞