您的位置:首页 > 职场人生

传说中面试必考的算法之回形数

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

每天定个小目标,先解决一个问题。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: