第一题其实是阅读理解题
第一题本质是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; } }
```
#笔经#