第一题其实是阅读理解题

第一题本质是leetcode54题螺旋矩阵,无非就是螺旋遍历矩阵,然后判断是不是符合条件,输出就行了。但是!!!有大坑:

  • 大坑1: 不能使用Java自带的输出!我做的时候,图方便,是用一个List<List<Integer>> res=new LinkedList<>();来保存结果,然后直接System.out.print(res);,结果,详细看输出的结果:
    图片说明
    里面是有空格的!!!这样就一直只能通过20%。。。。所以,一定要老老实实,用StringBuilder拼接结果。。。

  • 大坑2: 题目中有一句,“如果输入的数据不符合要求,请输出空(原话忘记了,意思就是输出“[]”)”。那要求是什么,行列数的范围是[10,1000],所以,加一句判断

    if(row<10||row>1000||col<10||col>1000){
        System.out.println(new ArrayList<>());
        return;
    }

    加上面这个判断,就能多通过30%
    这题做的,真的让人印象深刻,光这一道题,就搞了一个小时。。。后面的第二题马马虎虎做了下,过了50%,第三题看都没看。贴一下第一题的代码,写的很丑,勿喷。

    import java.util.*;
    public class Main {
      public static void main(String[] args){
          Scanner scanner=new Scanner(System.in);
          int row=scanner.nextInt();
          int col=scanner.nextInt();
          if(row<10||row>1000||col<10||col>1000){
              System.out.println("[]");
              return;
          }
          int colStart=0,colEnd=col-1;
          int rowStart=0,rowEnd=row-1;
          int cout=0;
          List<List<Integer>> res=new LinkedList<>();
          while (rowStart<rowEnd&&colStart<colEnd){
              //上面的行
              for (int i=colStart;i<colEnd;++i){
                  ++cout;
                  if(check(cout)){
                      res.add(Arrays.asList(rowStart,i));
                  }
              }
              //左侧的列
              for(int i=rowStart;i<rowEnd;++i){
                  ++cout;
                  if(check(cout)){
                      res.add(Arrays.asList(i,colEnd));
                  }
              }
              //下面的行
              for(int i=colEnd;i>colStart;--i){
                  ++cout;
                  if(check(cout)){
                      res.add(Arrays.asList(rowEnd,i));
                  }
              }
              for (int i=rowEnd;i>rowStart;--i){
                  ++cout;
                  if(check(cout)){
                      res.add(Arrays.asList(i,rowStart));
                  }
              }
              ++rowStart;
              --rowEnd;
              ++colStart;
              --colEnd;
          }
          if(rowStart!=rowEnd) {//colStart==colEnd
              for(int i=rowStart;i<=rowEnd;++i){
                  ++cout;
                  if (check(cout)){
                      res.add(Arrays.asList(i,colStart));
                  }
              }
          }else {//rowStart==rowEnd
              for(int i=colStart;i<=colEnd;++i){
                  ++cout;
                  if(check(cout)){
                      res.add(Arrays.asList(rowStart,i));
                  }
              }
          }
          if(res.size()==0){
              System.out.print("[]");
              return;
          }
          StringBuilder builder=new StringBuilder();
          builder.append("[");
          for(List item:res){
              builder.append("[");
              builder.append(item.get(0));
              builder.append(",");
              builder.append(item.get(1));
              builder.append("],");
          }
          builder.deleteCharAt(builder.length()-1);
          builder.append("]");
          System.out.print(builder);
      }
    
      public static boolean check(int data){
          if(data>=17){
              //获取个位
              int data1=data%10;
              data/=10;
              //获取十位
              int data2=data%10;
              return data1==7&&((data2&1)==1);
          }
          return  false;
      }
    }
    

```

#笔经#
全部评论
我就是忘记考虑第一题的边界条件了哭死了,我也是搞了一个小时&hellip;&hellip;输出格式也是找了半天才输出对&hellip;&hellip;
点赞 回复 分享
发布于 2020-08-19 21:57
唉😂😂😂太难了
点赞 回复 分享
发布于 2020-08-19 22:00
大佬,请问你这样写第一题全过了是吗
点赞 回复 分享
发布于 2020-09-09 10:24

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
4
3
分享
牛客网
牛客企业服务