首页 > 其他分享 >11.9打卡

11.9打卡

时间:2023-11-09 15:55:06浏览次数:34  
标签:11.9 int ++ grid put new 打卡 dp

1.  不同路径(61)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        for (int i = 0; i < n; i++) dp[0][i] = 1;
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];  

    }
}

2. 有障碍物的不同路径(63)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    int m=obstacleGrid.length,n=obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        dp[0][0]=obstacleGrid[0][0]==0?1:0;
        for (int i = 1; i < n; i++) dp[0][i] = obstacleGrid[0][i]==1?0:dp[0][i-1];
        for (int i = 1; i < m; i++) dp[i][0] = obstacleGrid[i][0]==1?0:dp[i-1][0];
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if(obstacleGrid[i][j]==1){
                    dp[i][j]=0;
                }else
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
}

3. 最小路径和(64)

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

class Solution {
    public int minPathSum(int[][] grid) {
 if (grid == null || grid.length == 0 || grid[0].length == 0) {
            return 0;
        }
        int rows = grid.length, columns = grid[0].length;
        int[][] dp = new int[rows][columns];
        dp[0][0] = grid[0][0];
        for (int i = 1; i < rows; i++) {
            dp[i][0] = dp[i - 1][0] + grid[i][0];
        }
        for (int j = 1; j < columns; j++) {
            dp[0][j] = dp[0][j - 1] + grid[0][j];
        }
        for (int i = 1; i < rows; i++) {
            for (int j = 1; j < columns; j++) {
                dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
            }
        }
        return dp[rows - 1][columns - 1];

    }
}

4. 有效数字

有效数字(按顺序)可以分成以下几个部分:

  1. 一个 小数 或者 整数
  2. (可选)一个 'e' 或 'E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 '.'
    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 至少一位数字

s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.'

    public boolean isNumber(String s) {
        Map[] states = {
                new HashMap<>() {{ put(' ', 0); put('s', 1); put('d', 2); put('.', 4); }}, // 0.
                new HashMap<>() {{ put('d', 2); put('.', 4); }},                           // 1.
                new HashMap<>() {{ put('d', 2); put('.', 3); put('e', 5); put(' ', 8); }}, // 2.
                new HashMap<>() {{ put('d', 3); put('e', 5); put(' ', 8); }},              // 3.
                new HashMap<>() {{ put('d', 3); }},                                        // 4.
                new HashMap<>() {{ put('s', 6); put('d', 7); }},                           // 5.
                new HashMap<>() {{ put('d', 7); }},                                        // 6.
                new HashMap<>() {{ put('d', 7); put(' ', 8); }},                           // 7.
                new HashMap<>() {{ put(' ', 8); }}                                         // 8.
        };
        int p = 0;
        char t;
        for(char c : s.toCharArray()) {
            if (c >= '0' && c <= '9') t = 'd';
            else if (c == '+' || c == '-') t = 's';
            else if (c == 'e' || c == 'E') t = 'e';
            else if (c == '.' || c == ' ') t = c;
            else t = '?';
            if (!states[p].containsKey(t)) return false;
            p = (int)states[p].get(t);
        }
        return p == 2 || p == 3 || p == 7 || p == 8;
    }

正则匹配

class Solution {
    public boolean isNumber(String s) {
 boolean isNum = false, isDecimal = false, isE = false,isSign = false;
        int len = s.length() - 1;
        for (int i = 0; i <= len; i++) {
            char tmp = s.charAt(i);
            if (0 <= tmp - '0' && tmp - '0' <= 9) {
                isNum = true;
            } else if (tmp == '.'){
                if (isDecimal || (!isNum && i == len) || isE)
                    return false;
                isDecimal = true;
            } else if (tmp == 'e' || tmp == 'E') {
                if (isE || !isNum || i == len)
                    return false;
                isE = true;
            } else if (tmp == '-' || tmp == '+' ) {
                 if ((i > 0 && s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E') || i == len) 
                     return false;
                 isSign = true;
            }
            else {
                return false;
            }
        }
        return true;
    }
}

 

标签:11.9,int,++,grid,put,new,打卡,dp
From: https://www.cnblogs.com/forever-fate/p/17821871.html

相关文章

  • 11.9算法
    题目二叉树的锯齿形层次遍历给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入......
  • 11月8每日打卡
    实验1熟悉常用的Linux操作和Hadoop操作1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3。3.......
  • 11.7打卡
    1.N皇后II(52)返回N皇后的解集数量classSolution{publicinttotalNQueens(intn){int[]queeens=newint[n];Arrays.fill(queeens,-1);Set<Integer>cols=newHashSet<>(n);Set<Integer>dia1=newHashSet<>......
  • 20231107打卡
    上午的第一节课是算法与数据结构的课程。这门课程对于我们软工学生来说非常重要,因为它涉及到我们日后编写高效代码的能力。今天的内容是广度和深度优先搜索算法,在老师的讲解下,我逐渐理解了它们的原理和应用场景。通过讲解和举例,我们学习了如何使用这两种搜索算法解决实际问题。在......
  • 20231106打卡
    上午的实训课程是机械拆装,这是我们软工专业的一门基础课程。在实训课上,我们学习了自行车的拆装技术。通过实际操作,我们了解了自行车的各个部件以及它们之间的组装方式。我们学习了如何正确使用工具,拆卸和安装自行车的零件,以及如何调整和维护自行车的性能。这门课程的实践性很强,不......
  • 11月5每日打卡
    实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠:代码Cat接口(另一个类似):publicinterfaceCat{voidcry();voidcatchMouse();}实体Cat类(另一个类似):publicclassConcreteCatimplementsCat{@Overridepublicvoidcry(){System.out.println("猫叫......
  • 11月6每日打卡
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 11月7每日打卡
    用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。源码://Road.javapackageshiyan9;publicabstractclassRoad{protectedVehiclevehicle;publicvoidsetVehicle(Vehicleve){this.vehicle=ve;}publicabstractvo......
  • 11月4每日打卡
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图; 2.......
  • 20231031打卡
    上午的课程是算法与数据结构中的图的存储结构。图是一种重要的数据结构,用于表示事物之间的关系和连接。在今天的课上,我们学习了图的不同存储结构,包括邻接矩阵和邻接表。我们通过理论讲解和实际编程练习,深入了解了每种存储结构的特点和适用场景。同时,我们也学习了图的基本操作,如添......