2022-3-15 剑指offer day32

题1:

JZ64 求1+2+3+...+n

描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
 
数据范围: 0 < n \le 2000<n200
进阶: 空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)
1 public class Solution {
2     public int Sum_Solution(int n) {
3         boolean a=n>1&&((n+=Sum_Solution(n-1))>0);
4         return n;
5     }
6 }

思路:逻辑与 加 递归

 

 

题2:

JZ29 顺时针打印矩阵

描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
则依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
数据范围:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
 
 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> printMatrix(int [][] matrix) {
 4        ArrayList<Integer> list=new ArrayList<>();
 5        int m=matrix.length,n=matrix[0].length,sum=m*n;
 6        int x=0,y=-1,count=0;
 7        int[][] dir={{0,1},{1,0},{0,-1},{-1,0}};
 8        int dirindex=0;
 9        boolean[][] visited=new boolean[m][n];
10        while (count<sum) {
11            x+=dir[dirindex][0];
12            y+=dir[dirindex][1];
13            while (x>=0&&x<m&&y>=0&&y<n&&!visited[x][y]){
14                list.add(matrix[x][y]);
15                count++;
16                visited[x][y]=true;
17                x+=dir[dirindex][0];
18                y+=dir[dirindex][1];
19            }
20            x-=dir[dirindex][0];
21            y-=dir[dirindex][1];
22            dirindex=(dirindex+1)%4;
23        }
24        return list;
25     }
26 }

思路:四个方向遍历。

posted on 2022-03-15 10:36  阿ming  阅读(26)  评论(0)    收藏  举报

导航