传说中面试必考的算法之回形数
2020-04-07 00:12
58 查看
- 每天学习必定要学会点东西,无奈实在太懒了只好通过做练习和写博客来帮助记住知识点哈哈!
- 不多说了今天目标搞懂回形数和杨辉三角这里懒得写两篇就放在一起吧哈哈!
回形数
package paixu; /** * * @author GRZn: * @2020/04/06: * @ java小白: * * */ import java.util.Scanner; public class huixingshu { static int n,sum,flag = 1; static int[][] pattern; public static void Pattern(int num) { // 假设n=3时 最上边 1 2 3 for (int i = num; i < n - num - 1; i++) { pattern[num][i] = flag++; if (flag > sum) return; } //最右边 // 3 // 4 // 5 for (int i = num; i < n - num - 1; i++) { pattern[i][n - num - 1] = flag++; if (flag > sum) return; } // 最底边 7 6 5 for (int i = n - num - 1; i > num; i--) { pattern[n - num - 1][i] = flag++; if (flag > sum) return; } // 最左边 //1 在第一行已经打印 //8 //7 for (int i = n - num - 1; i > num; i--) { pattern[i][num] = flag++; if (flag > sum) return; } // 9 Pattern(++num); } //主函数 public static void main(String[] args) { System.out.println("回形取数就是沿矩阵的边取数,若当前方向上无数可取" + "或已经取过,则左转90度。一开始位于矩阵左上角,方向向下:"); System.out.println("\n请输入矩阵的行列数:"); Scanner scan = new Scanner(System.in); n = scan.nextInt(); pattern = new int[n][n]; //预处理奇偶数的不同 if(n%2==0){ sum=n*n; } else{ sum=n*n-1; pattern[(n-1)/2][(n-1)/2]=n*n; } huixingshu.Pattern(0); //调用写好的函数,num传值为0 // 输出图案 for (int[] row : pattern ) { //遍历二维数组中每一个一维数组 行上元素为二维数组 for (int column : row) { //遍历一维数组中每一个元素 列上元素为一维数组 System.out.print( column + "\t"); } System.out.println("\n"); } } } 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下: 请输入矩阵的行列数: 4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
杨辉三角
package paixu; import java.util.Scanner; /** * * @author GRZn: * @2020/04/06: * @ java小白: * * */ public class yangHuiTriangle { public static void ShuanFa(int[][] arr ){ //杨辉三角函数 for(int i=0;i<arr.length;i++){ arr[i]=new int[i+1]; //第一行yanghui[0]开辟1个单元内存,以此内推第十行yanghui[9]开辟10个 } //算法核心内容 for(int i=0;i<arr.length;i++) { for(int j=0;j<arr[i].length;j++){ arr[i][0]=arr[i][i]=1; if(i>1&&j<i&&j>0) { arr[i][j]=arr[i-1][j]+arr[i-1][j-1]; } } } //遍历后打印数 for(int i=0;i<arr.length;i++) { for(int j=0;j<arr[i].length;j++) { System.out.print(arr[i][j]+"\t"); } System.out.println(); } } public static void main(String[] args) { int num; Scanner scan = new Scanner(System.in); System.out.println("请输入需要打印的行数:"); num = scan.nextInt(); int [][] arr = new int[num][]; System.out.println("该行数杨辉三角图像如下:"); yangHuiTriangle.ShuanFa(arr); //函数调用方式 : 类名.函数名(变量名) } } 请输入需要打印的行数: 5 该行数杨辉三角图像如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
每天定个小目标,先解决一个问题。
相关文章推荐
- Google 资深工程师苏勇:算法面试6大数据结构必考知识点!
- 十种常见的排序算法,面试算法必考
- 10分钟详解:算法面试5大必考排序方式
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(文档)
- 10个经典C语言面试基础算法
- 黑马程序员:关于我对IO流的总结以及习题(面试必考项目)
- 编程面试的10大算法概念汇总
- 编程面试的10大算法概念汇总
- 方欣科技算法题面试:蛇形矩阵
- 前端面试中的常见的算法问题
- 一道看上去很吓人的算法题 【微软面试去100题 第四十九题】
- 视频教程-2020年前端面试/晋级必修,60分钟掌握JavaScript核心算法-JavaScript
- 面试经典算法2之插入排序
- 面试算法之字符串匹配算法,Rabin-Karp算法详解
- 准备面试需要知道的经典算法--快排
- 准备面试需要知道的经典算法--堆排序
- 面试算法之排序算法集锦
- 前端JS 中常见算法面试试题
- 【算法】数据结构面试算法题目