目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、JavaScript算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上,输出箱子的摆放位置,例如:箱子ABCDEFG,空地宽为3。
摆放效果如下图:
则输出结果为:
AFG
BE
CD
二、输入描述
一行字符串,通过空格分割两部分,前面str部分表示箱子的字符串由数字或字母组成,后面部分是表示宽度的数字n,
如下:
ABCDEFG 3
三、输出描述
输出:
AFG
BE
CD
注:最后一行不得输出额外的空行
str只包含数字和数字,1<=len(str)<=1000,1<=n<=1000。
四、解题思路
- 将输入的字符串按空格分割为两部分,分别为箱子的字符串和空地的宽度;
- 创建一个HashMap map,用于存储每行的字符串;Key为行的下标,Value为对应的字符串;
- 遍历箱子的字符串,根据空地的宽度确定每个字符应该放置的行和列;
- 计算当前字符所在的列,即columnIdx = i / num,其中i为当前字符的索引;
- 如果columnIdx是偶数,则表示从左往右摆放,行索引不变,列索引为i % num;
- 如果columnIdx是奇数,则表示从右往左摆放,行索引不变,列索引为num - 1 - (i % num),即倒序摆放;
- 将当前字符添加到对应行的字符串中;
- 遍历HashMap map,按行输出箱子的摆放位置;
- 输出结果。
五、JavaScript算法源码
function arrangeBoxes(str, n) {
const map = new Map();
for (let i = 0; i < str.length; i++) {
const columnIdx = Math.floor(i / n);
let index;
if (columnIdx % 2 === 0) {
index = i % n;
} else {
index = n - 1 - (i % n);
}
const val = map.get(index) || '';
map.set(index, val + str.charAt(i));
}
let result = '';
for (let [key, value] of map.entries()) {
result += value + '\n';
}
return result.trim();
}
六、效果展示
1、输入
ABCDEFGHIJKMLN 4
2、输出
AHI
BGJ
CFKN
DEML
3、说明
关键是要看破【偶索引正序、奇数列倒序】。
🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。