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. 有效数字
有效数字(按顺序)可以分成以下几个部分:
- 一个 小数 或者 整数
- (可选)一个
'e'
或'E'
,后面跟着一个 整数
小数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符(
'+'
或'-'
) - 下述格式之一:
- 至少一位数字,后面跟着一个点
'.'
- 至少一位数字,后面跟着一个点
'.'
,后面再跟着至少一位数字 - 一个点
'.'
,后面跟着至少一位数字
- 至少一位数字,后面跟着一个点
整数(按顺序)可以分成以下几个部分:
- (可选)一个符号字符(
'+'
或'-'
) - 至少一位数字
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