V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeopardDennis
V2EX  ›  程序员

一道面试题

  •  
  •   LeopardDennis · 2015-04-10 23:54:24 +08:00 · 4276 次点击
    这是一个创建于 3520 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天面试遇到的题目:
    给定一个整数n,生成一个形如[1,[2,[3,[n,"$$$$..."]]]]的数组。例如:n=4,生成[1,[2,[3,[4,"$$$$"]]]]。各位大神,请各显神通。

    我的答案:
    <?php

    function bulidArray($length, $offset = 1) {
    return [$offset, ($offset < $length) ? bulidArray($length, $offset + 1) : str_repeat('$', $offset)];
    }

    15 条回复    2015-04-12 15:37:07 +08:00
    Valyrian
        1
    Valyrian  
       2015-04-10 23:59:03 +08:00 via iPhone
    def f(m):
    def g(n, i):
    if i>n:
    return "$$$$"
    else:
    return [i, g(n,i+)]
    return g(m, 1)
    Puteulanus
        2
    Puteulanus  
       2015-04-11 01:11:41 +08:00   ❤️ 3
    <?php
    function bulidArray($length,$offset = 1){
    $array = array($length,str_repeat('$',--$length + $offset));
    while($length)
    $array = array($length--,$array);
    return $array;
    }
    还在学,写的不好。。
    jiang42
        3
    jiang42  
       2015-04-11 04:33:21 +08:00
    @Valyrian 你题目没看清吧。。。然后倒数第二行似乎有点问题。。。

    写一个迭代的

    ptr = res = []
    for i in range(1, n+1):
    ptr.append([i])
    ptr = ptr[-1]

    ptr.append('$'*n)

    要的结果在res里
    savebox
        4
    savebox  
       2015-04-11 07:56:32 +08:00
    写个reduce实现的:
    def r(n):return reduce(lambda x,y:[y]+[x],(range(1,n+1)+['$'*n])[::-1])
    laoyuan
        5
    laoyuan  
       2015-04-11 09:12:03 +08:00
    递归0分,哈哈
    function ba($n)
    {
    $a = array(1, str_repeat('$', $n));
    for($i = $n; $i > 1; $i --)
    {
    $a[1] = array($i, $a[1]);
    }
    return $a;
    }
    zqhong
        6
    zqhong  
       2015-04-11 09:36:54 +08:00
    @Puteulanus 小白有个疑问,函数bulidArray里面的形参 offset 有什么作用?
    Puteulanus
        7
    Puteulanus  
       2015-04-11 13:07:59 +08:00   ❤️ 1
    @zqhong 我也是小白= =
    仔细看了下,感觉我貌似理解错了楼主的offset,他的应该是用来控制层数的。。
    _(:з」∠)_我的里面是拿来控制$的个数的。。
    gaocegege
        8
    gaocegege  
       2015-04-11 13:17:20 +08:00
    好像函数式里面的List定义。。。
    Bruta
        9
    Bruta  
       2015-04-11 13:58:47 +08:00
    retanoj
        10
    retanoj  
       2015-04-11 14:53:19 +08:00   ❤️ 1
    我也来一个
    def p(n):
    reduce(lambda x,y:[y]+[x], range(n,0,-1), '$'*n)
    clippit
        11
    clippit  
       2015-04-11 15:25:41 +08:00
    function build(length) {
    var arr = [length, (new Array(length + 1)).join('$')];

    for (var i = length - 1; i > 0; i--) {
    arr = [i, arr];
    }

    return arr;
    }



    JSON.stringify(build(5))
    "[1,[2,[3,[4,[5,"$$$$$"]]]]]"
    Galvin
        12
    Galvin  
       2015-04-11 15:37:09 +08:00
    其实我觉得楼主的就已经挺好的了= =
    简洁明了
    yuankui
        13
    yuankui  
       2015-04-11 19:52:43 +08:00
    递归不是很容易实现??
    Sunyanzi
        14
    Sunyanzi  
       2015-04-12 10:43:53 +08:00
    这么简单的需求还用啥递归 ... 直接用循环就够了 ...

    $n = 4;

    for ( $arr = [], $i = 0, $tar = &$arr; $i < $n; $tar = &$tar[1] ) $tar = [ ++ $i, null ];
    $arr && $tar = str_repeat( '$', $i );

    如果 $n > 0 那么返回需要的数据 ... 如果 $n < 1 返回空数组 ...
    LeopardDennis
        15
    LeopardDennis  
    OP
       2015-04-12 15:37:07 +08:00
    @yuankui 就是用的递归
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3505 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:44 · PVG 12:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.