zoukankan      html  css  js  c++  java
  • 2020-03-08

    庚子鼠年 己卯月 庚戌日

    描述

    今天把七牛云图床解决了,写博客的图片再也不用担心麻烦了

    优化了一下项目

    把前面写的设计模式构建思维导图

    随笔

    js与thymeleaf结合,js获取thymeleaf变量

    <script th:inline="javascript">//一定要加上这句
    [[${msg}]]
    

    性能分析

    package chang.性能测试;
    
    import java.util.Scanner;
    
    
    public class Main {
    
        public static int N;  //n*n矩阵,从0开始计数
        public static int M;  //1-m矩阵 m<=9 填的数据
        public static int[][] arr = new int[9][9];
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            N = sc.nextInt() - 1;
            M = N + 1;
            int k = sc.nextInt();
    
            for (int w = 0; w < k; w++) {
                for (int i = 0; i <= N; i++) {
                    for (int j = 0; j <= N; j++) {
                        arr[i][j]  = sc.nextInt();
                    }
                }
                dfs(0);
            }
        }
    
        public static void dfs(int cut) {
            int n = N + 1 ;
            if(cut==Math.pow(n, 2)) {
                print_arr();
                return;
            }
            //通过cut求出行与列(i,j)
            int i = cut / n;
            int j = cut % n;
    
            //已知条件以读入的数据
            if(arr[i][j] != 0) {
                dfs(cut + 1);
                return;
            }
    
            //arr填入1-M试探
            for(int t = 1;t <= M; t++) {
                if(isColAndRow(i,j,t)&&isGrid(i,j,t)) {
                    arr[i][j] = t;
                    dfs(cut + 1);
                    //回溯
                    arr[i][j] = 0;
                }
            }
        }
    
        /**
         * 打印出结果
         */
        public static void print_arr() {
            for(int i = 0 ;i <= N;i++ ) {
                for(int j = 0;j <= N;j++) {
                    System.out.print(arr[i][j]+"  ");
                }
                System.out.println();
            }
            System.out.println();
        }
    
    
        /**
         * i行j列填入k是否满足条件(仅判断行与列)
         * @param i 测试行
         * @param j 测试列
         * @param k 当前试探值
         * @return 是否满足条件
         */
        public static boolean isColAndRow(int i,int j,int k) {
            //列不变
            for(int p = 0;p <= N ;p++) {
                if(p!=i&&arr[p][j]==k) {
                    return false;
                }
            }
            //行
            for(int p = 0;p <= N ;p++) {
                if(j!=p&&arr[i][p]==k) {
                    return false;
                }
            }
            return true;
        }
        /**
         * 判断在当前块是否满足条件
         * @param i
         * @param j
         * @param k
         * @return
         */
        public static boolean isGrid(int i,int j,int k) {
            int n = N +1;
            if(105%n==0) {
                return true;
            }
            //方块的c行与r列
            int c = 0,r = 0;
            if(n%3==0) {
                c = 3;
                r = n/3;
            }else if(n%2==0) {
                c = 2;
                r = n/2;
            }
    
            //算出具体的格子大小
            c = n / c;
            r = n / r;
            //通过i,j知道在那一个方格中
            int in_c = (i/c)*c;
            int in_r = (j/r)*r;
            for(int p =in_c;p < in_c + c;p++) {
                for(int q = in_r;q < in_r + r;q++) {
                    if(arr[p][q]==k) {
                        if(p==i&&q==j) {
                            continue;
                        }
                        return false;
                    }
                }
    
            }
            return true;
        }
    
    }
    

    这个是上次作业的代码,拿来性能分析一下

    浅拷贝

    // 实现接口 Cloneable
    
    @Override
    	protected User clone() {
            return (User)super.clone();
    	}
    

    深拷贝

    // 实现接口 Cloneable, Serializable	
    //方法一:流方式
    @Override
    	protected User clone() {
    		User cloneObj = null;
    		try {
                //写入字节流
    			//将对象写入流中
    	        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    	        ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
    	        objectOutputStream.writeObject(this);
    	        //从流中取出
    	        ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
    	        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
                cloneObj = (User) objectInputStream.readObject();
                outputStream.close();
                objectOutputStream.close();
                inputStream.close();
                objectInputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    		return cloneObj;
    //		return (User)super.clone();
    	}
    
    // 方法二
    方式实现里面对象的clone方法,不推荐
    

    提取工具类

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
     
    /**
     * 通过字节流序列化实现深拷贝,需要深拷贝的对象必须实现Serializable接口
     * 
     * @author Administrator
     */
    public class CloneUtils {
    	@SuppressWarnings("unchecked")
    	public static <T extends Serializable> T clone(T obj) {
    		T cloneObj = null;
    		try {
    			// 写入字节流
    			ByteArrayOutputStream out = new ByteArrayOutputStream();
    			ObjectOutputStream obs = new ObjectOutputStream(out);
    			obs.writeObject(obj);
    			obs.close();
     
    			// 分配内存,写入原始对象,生成新对象
    			ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
    			ObjectInputStream ois = new ObjectInputStream(ios);
    			// 返回生成的新对象
    			cloneObj = (T) ois.readObject();
    			ois.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return cloneObj;
    	}
    }
    
  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/chang1024/p/12445123.html
Copyright © 2011-2022 走看看