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<n≤200
进阶: 空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)
进阶: 空间复杂度 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 }
思路:四个方向遍历。
浙公网安备 33010602011771号