华为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));
        }


    }

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值