一道面试题

2015-04-10 23:54:24 +08:00
 LeopardDennis

昨天面试遇到的题目:
给定一个整数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)];
}

4296 次点击
所在节点    程序员
15 条回复
Valyrian
2015-04-10 23:59:03 +08:00
def f(m):
def g(n, i):
if i>n:
return "$$$$"
else:
return [i, g(n,i+)]
return g(m, 1)
Puteulanus
2015-04-11 01:11:41 +08:00
<?php
function bulidArray($length,$offset = 1){
$array = array($length,str_repeat('$',--$length + $offset));
while($length)
$array = array($length--,$array);
return $array;
}
还在学,写的不好。。
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
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
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
2015-04-11 09:36:54 +08:00
@Puteulanus 小白有个疑问,函数bulidArray里面的形参 offset 有什么作用?
Puteulanus
2015-04-11 13:07:59 +08:00
@zqhong 我也是小白= =
仔细看了下,感觉我貌似理解错了楼主的offset,他的应该是用来控制层数的。。
_(:з」∠)_我的里面是拿来控制$的个数的。。
gaocegege
2015-04-11 13:17:20 +08:00
好像函数式里面的List定义。。。
Bruta
2015-04-11 13:58:47 +08:00
retanoj
2015-04-11 14:53:19 +08:00
我也来一个
def p(n):
reduce(lambda x,y:[y]+[x], range(n,0,-1), '$'*n)
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
2015-04-11 15:37:09 +08:00
其实我觉得楼主的就已经挺好的了= =
简洁明了
yuankui
2015-04-11 19:52:43 +08:00
递归不是很容易实现??
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
2015-04-12 15:37:07 +08:00
@yuankui 就是用的递归

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182966

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX