阿里前端笔试填表单题目解题思路(然而时间不够我并没有提交)

如果今晚阿里能够多给我点时间,给个20-30分钟,我就能把这道题交上去,然而当交卷的时候,这道题我是一片空白,只剩一点时间完全没有时间写了。看来我注定的是和阿里无缘了,唉,说多了都是泪,楼主一个双非本科是真心的累啊!笔试不出点彩根本没机会啊!
以下只是给出一个思路,并不一定是最优解,代码也不一定完全正确,毕竟没有环境跑。
其实这道题目和电话号码的字母组合http://www.lintcode.com/zh-cn/problem/letter-combinations-of-a-phone-number/)有点像,我们把每一组数据看成是一个数据组,那么假设第 i 组数据有 m 个数据,第 i-1 组数据有 n 个数据,那么 i 和 i-1 可以组成 m*n 个数据组,使用递归法求得公式第 i 组数据与 i+1 组数据可以组成的数据组个数 f(i) = i * f(i+1),那么我们的就可以先通过递归公式求出数据组,然后用数据组去填充表格,如果假设 data[i] 的长度为 d[i] 的话,那么空间复杂度和时间复杂度是一样的 O(d[1] * d[2] * d[3] * ... ... * d[n])。貌似有点大,不过表格的数据必须要填充这么多项。
function fillSheet(sheet, data) {
	
    function dataGroups (data) {
    	var groups = [];
    	//递归求解下一个数据组
    	var nextGroups = dataGroups(data.slice(1, data.length));
    	//当前数据组
    	var currentGroups = data[0];
    	if(nextGroups.length <= 0){
    		//数据组的边界,当求到 data 末尾时,返回
    		return currentGroups;
    	}else{
    		//即若第n行及以下组若有x列,且n-1行有y列,则会生成x·y列的数据组
	    	for (var i = 0; i < currentGroups.length; i++) {
	    		for(var j = 0; j < nextGroups.length; j++){
	    			var dataCol = nextGroups[j].unshift(currentGroups[i]);
	    			groups.push(dataCol);
	    		}
	    	}
    	}
    	return groups;
    }

    var dataGroups = dataGroups(data);

    for (var i = 0; i < dataGroups.length; i++) {
    	for(var j = 0; j < dataGroups[i].length; j++){
    		//注意这里我们数据组的行和列是相反的,dataGroups 中的每一个元素代表一列数据组
    		sheet.setSheet(j, i, dataGroups[i][j]);
    	}
    }
}

#阿里巴巴##前端工程师#
全部评论
我前端和你不一样哎
点赞 回复 分享
发布于 2017-08-23 23:16
前端必须要用JavaScript吗?可以用Java写吗?
点赞 回复 分享
发布于 2017-08-23 22:06
都不一样好像…
点赞 回复 分享
发布于 2017-08-23 22:05
我好像没这题。。
点赞 回复 分享
发布于 2017-08-23 21:07

相关推荐

牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务