美文网首页
算法修炼记录

算法修炼记录

作者: 楼兰King | 来源:发表于2024-03-05 14:04 被阅读0次

public class kkkk {
public static void main(String[] args) {
int a[] ={1,2,3,4,6};
int target=6;
/++i 和i++ ,先相加后返回的区别,在此处其实效果都一样/
twoSum(a,target);
System.out.println("------");
twoSuma(a,target);
char[][] board = {
{'5', '3', '.', '.', '7', '.', '.', '.', '.'},
{'6', '.', '.', '1', '9', '5', '.', '.', '.'},
{'.', '9', '8', '.', '.', '.', '.', '6', '.'},
{'8', '.', '.', '.', '6', '.', '.', '.', '3'},
{'4', '.', '.', '8', '.', '3', '.', '.', '1'},
{'7', '.', '.', '.', '2', '.', '.', '.', '6'},
{'.', '6', '.', '.', '.', '.', '2', '8', '.'},
{'.', '.', '.', '4', '1', '9', '.', '.', '5'},
{'.', '.', '.', '.', '8', '.', '.', '7', '9'}
};
// 三个布尔数组 表明 行, 列, 还有 3
3 的方格的数字是否被使用过
boolean[][] rowUsed = new boolean[9][10];
boolean[][] colUsed = new boolean[9][10];
boolean[][][] boxUsed = new boolean[3][3][10];
// 初始化
for(int row = 0; row < board.length; row++){
for(int col = 0; col < board[0].length; col++) {
int num = board[row][col] - '0';
if(1 <= num && num <= 9){
rowUsed[row][num] = true;
colUsed[col][num] = true;
boxUsed[row/3][col/3][num] = true;
}
}
}
// 递归尝试填充数组
recusiveSolveSudoku(board, rowUsed, colUsed, boxUsed, 0, 0);
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
System.out.print(board[i][j] + " ");
if(j==8){
System.out.println("------");
}
}
}
System.out.println();

}
public static boolean recusiveSolveSudoku(char[][]board, boolean[][]rowUsed, boolean[][]colUsed, boolean[][][]boxUsed, int row, int col){
    // 边界校验, 如果已经填充完成, 返回true, 表示一切结束
    if(col == board[0].length){
        col = 0;
        row++;
        if(row == board.length){
            return true;
        }
    }
    // 是空则尝试填充, 否则跳过继续尝试填充下一个位置
    if(board[row][col] == '.') {
        // 尝试填充1~9
        for(int num = 1; num <= 9; num++){
            boolean canUsed = !(rowUsed[row][num] || colUsed[col][num] || boxUsed[row/3][col/3][num]);
            if(canUsed){
                rowUsed[row][num] = true;
                colUsed[col][num] = true;
                boxUsed[row/3][col/3][num] = true;

                board[row][col] = (char)('0' + num);
                if(recusiveSolveSudoku(board, rowUsed, colUsed, boxUsed, row, col + 1)){
                    return true;
                }
                board[row][col] = '.';

                rowUsed[row][num] = false;
                colUsed[col][num] = false;
                boxUsed[row/3][col/3][num] = false;
            }
        }
    } else {
        return recusiveSolveSudoku(board, rowUsed, colUsed, boxUsed, row, col + 1);
    }
    return false;
}
/**数组中找出两个数和为指定数值*/
public static int[] twoSum(int[] nums, int target) {
        int numa=nums.length;
    for (int i = 0; i < numa; ++i) {
        for (int j = i+1; j < numa; ++j) {
            if(nums[i]+nums[j]==target){
                return new int[]{i,j};
            }
        }
    }
    return new int[0];
}
public static int[] twoSuma(int[] nums, int target) {
    int numa=nums.length;
    for (int i = 0; i < numa; i++) {
        for (int j = i+1; j < numa; j++) {
            if(nums[i]+nums[j]==target){
                return new int[]{i,j};
            }
        }
    }
    return new int[0];
}

}

相关文章

  • 一、数据结构与算法概述

    作为一名非科班出身的程序员,要修炼的内功其实挺多的。现在就开始记录自己修炼数据结构与算法的路程。从数据结构与算法的...

  • 算法修炼

    冒泡与快排(更新中)

  • 《人生算法》之自我修炼九段算法(上半场)

    ——读书笔记:“《人生算法》之自我修炼九段算法(上半场) 自我修炼的九段算法,是一个打磨钻石的过程,每一段都像一道...

  • 《人生算法》之自我修炼九段算法(下半场)

    ——读书笔记:“《人生算法》之自我修炼九段算法”下半场 自我修炼的九段算法,是一个打磨钻石的过程,每一段都像一道激...

  • 算法技能修炼

    在这里立下自己的flag,坚持健身的习惯已经养成接下来该换一个习惯了。上次毫无准备地参加了PAT,结果可想而知被虐...

  • 关于分页

    分页的总页数算法 设总记录数:totalRecord每页最大记录数:maxResult 算法一:totalPage...

  • 算法——每日 N 题

    记录算法,三篇文章,持续更新,文章本意只是为了方便本人日后查看,如需转载请注明出处 算法——常见算法记录[http...

  • 算法——常见算法

    记录算法,三篇文章,持续更新,文章本意只是为了方便本人日后查看,如需转载请注明出处 算法——常见算法记录[http...

  • 算法——总结

    记录算法,三篇文章,持续更新,文章本意只是为了方便本人日后查看,如需转载请注明出处 算法——常见算法记录[http...

  • 算法记录

    这个文集主要是对自己学习算法的记录,这一年内一定要尽我所能的完善这个文集,早日离开码农这一行业。 喜欢python...

网友评论

      本文标题:算法修炼记录

      本文链接:https://www.haomeiwen.com/subject/jtrdzdtx.html