讨论/算法和数据结构/哪位可以作出这个算法题目?/
哪位可以作出这个算法题目?

字节一面题目:
这题目看着简单,但就是不知道怎么写出来,哪位不吝赐教,写下你的代码
WechatIMG3.png

展开讨论

太菜了 T T, 研究了我快两个小时,用了个最蠢的方法做出来。。
主要的思路是:

  1. 把生成的新节点数据推到栈里面
    2)数组取出来的新数据,要和栈顶元素比较大小
    如果数组的数字大于栈顶元素存放的数字,新节点存放到栈顶元素的 child 中,继续取下一个数组数字进行比较
    如果数组的数字小于等于栈顶元素存放的数字,栈顶元素弹出,继续比较
    栈如果为空的话,把新节点存放到根节点
    希望对你有帮助 :)

function hToNumber(value) {
	return parseInt(value.split('').reverse().join());
}

function transformer(array = []) {
	return array.reduce(
		(ctx, value) => {
			const { stack, result } = ctx;
			const pending = { name: value, child: [] };

			if (result.length === 0) {
				result.push(pending);
				stack.push(pending);
			} else {
				while (1) {
					let item = stack.pop();
					if (item) {
						if (hToNumber(value) > hToNumber(item.name)) {
							item.child.push(pending);
							stack.push(item);
							stack.push(pending);
							break;
						} else {
							continue;
						}
					} else {
						result.push(pending);
						stack.push(pending);
						break;
					}
				}
			}

			return {
				stack,
				result
			};
		},
		{
			stack: [],
			result: []
		}
	).result;
}

transformer(["h3", "h2", "h3", "h1", "h2", "h3", "h3", "h2", "h3", "h1", "h2", "h4", "h2", "h3"]);

展开全部 4 讨论