华为OD题目:箱子之形摆放
一、箱子之形摆放 题目描述:
要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上,输出箱子的摆放位置,例如:箱子ABCDEFG,空地宽为3,摆放效果如下图:
则输出结果为: AFG BE CD
输入: 一行字符串,通过空格分割两部分,前面str部分表示箱子的字符串由数字或字母组成,后面部分是表示宽度的数字n,如下: ABCDEFG 3 输出: AFG BE CD
注:最后一行不得输出额外的空行
str只包含数字和数字,1<=len(str)<=1000,1<=n<=1000。
解题思路:
-
本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解 比如在第一列,第0个字符A,index是0,第二列,第一个字符D,index=(n-1- i%n) = 3,具体见下面的代码 在这里插入代码片
下面是代码:
// 解题思路: // 本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] strings = line.split(" "); int n = Integer.parseInt(strings[1]); //map key用来存放每一行的下标,value对应的字符串 Map<Integer, String> map = new HashMap<>(); String letterStr = strings[0]; for (int i = 0; i < letterStr.length(); i++) { int columnIdx = i/n; //如果是偶数列,那么是正序,奇数列是倒序 int index; if (columnIdx % 2 == 0) { //索引正序 index = i % n; }else { //如果是奇数列,那么是倒序 index = n - 1 - i % n; } String str = map.getOrDefault(index, ""); String val = str + letterStr.charAt(i); map.put(index, val); } for (int key : map.keySet()) { System.out.println(map.get(key)); } } }