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

如果今晚阿里能够多给我点时间,给个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 21:07
都不一样好像…
点赞 回复 分享
发布于 2017-08-23 22:05
前端必须要用JavaScript吗?可以用Java写吗?
点赞 回复 分享
发布于 2017-08-23 22:06
我前端和你不一样哎
点赞 回复 分享
发布于 2017-08-23 23:16

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务