LeetCode 64最小路径和65有效数字66加一
原创公众号:
bigsai
专注于Java、数据结构与算法,一起进大厂不迷路!
关注后回复进群即可加入力扣打卡群,欢迎划水。近期打卡:
LeetCode打卡 52八皇后Ⅱ&53最大子序和&54螺旋矩阵
LeetCode 55跳跃游戏&56合并区间&57插入区间
跟我打卡LeetCode 58最后一个单词长度&59螺旋矩阵Ⅱ&60排列序列
跟我打卡LeetCode 61旋转链表&62不同路径&63不同路径 II
最小路径和
简单的动态规划,只能向右或者向下,所以可以使用动态规划动态的找到最小路径和,先对第一行和第一列特殊处理,然后顺序遍历数组的时候状态转移方程为:
dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
其中dp[i][j]意为第i行第j列的最小路径和。
具体代码为:
public int minPathSum(int[][] grid) {int m=grid.length;int n=grid[0].length;int dp[][]=new int[m][n];dp[0][0]=grid[0][0];//先初始化第0行和第0列for(int i=1;i<n;i++){dp[0][i]=dp[0][i-1]+grid[0][i];}for(int j=1;j<m;j++){dp[j][0]=dp[j-1][0]+grid[j][0];}//System.out.println(Arrays.deepToString(dp));for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];}}return dp[m-1][n-1];}
有效数字
验证给定的字符串是否可以解释为十进制数字。
例如:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。
这里给出一份可能存在于有效十进制数字中的字符列表:数字 0-9
指数 - "e"
正/负号 - "+"/"-"
小数点 - "."
当然,在输入中,这些字符的上下文也很重要。
更新于 2015-02-10:
C++函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。
分析
这题其实挺麻烦的,我也是根据样例不停的测试然后才最终得到正确的结果。这些数字和符号有一定的规律和要求。 我的分析就是将数字分成三块 e前,e,e后。而每个数字可能是符号数字小数点等组成需要满足一定规律。符号可以没有,但是数字必须有! 具体可以参考这张图:
实现代码为:
public boolean isNumber(String s) {s=s.trim();char str[]=s.toCharArray();boolean smallpoint=false;//小数点boolean ise=false;//是否遇到eint localindex=0;//当前数字指标// 整体思路 左侧部分 e 右侧部分for(int i=0;i<str.length;i++){if(localindex==0&&(str[i]=='+'||str[i]=='-'))// + -号必须出现在前面 也就是localindex=0{if(smallpoint)return false; //小数点后不能有+- 例如0.+3continue;//否则继续}else if (str[i]=='.') {if(smallpoint||ise)//当有小数点或者在e后面 不能3.12.5 也不能1e2.3return false;else {smallpoint=true;//否则将标记出现过小数点}}else if ((str[i]=='e'||str[i]=='E')&&localindex>0) {//遇到eif(ise)return false;//如果已经有e 那么返回false 不能 4e5eelse {smallpoint=false;//否则说明正常,开始统计e右侧部分。e右侧部分开始重新统计ise=true;//标记e已经出现localindex=0;//数字编号}}else if (str[i]>='0'&&str[i]<='9') {localindex++;}else {return false;}}if (localindex>0) {return true;}else return false;}
还有这种方法就是有限状态机(DFA)解决,具体解释看题解吧:
图片来源力扣题解
class Solution {public int make(char c) {switch(c) {case ' ': return 0;case '+':case '-': return 1;case '.': return 3;case 'e': return 4;default:if(c >= 48 && c <= 57) return 2;}return -1;}public boolean isNumber(String s) {int state = 0;int finals = 0b101101000;int[][] transfer = new int[][]{{ 0, 1, 6, 2,-1},{-1,-1, 6, 2,-1},{-1,-1, 3,-1,-1},{ 8,-1, 3,-1, 4},{-1, 7, 5,-1,-1},{ 8,-1, 5,-1,-1},{ 8,-1, 6, 3, 4},{-1,-1, 5,-1,-1},{ 8,-1,-1,-1,-1}};char[] ss = s.toCharArray();for(int i=0; i < ss.length; ++i) {int id = make(ss[i]);if (id < 0) return false;state = transfer[state][id];if (state < 0) return false;}return (finals & (1 << state)) > 0;}
}作者:user8973
链接:https://leetcode-cn.com/problems/valid-number/solution/biao-qu-dong-fa-by-user8973/
来源:力扣(LeetCode)
加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
分析:简单题,只需要本本分分模拟即可,将数组最后一位加一,如果产生进位一直向前判断是否还需要进位。有一个需要注意的地方就是如果结束第0位也需要进位那么需要重新创建数组扩容赋值返回。
实现代码:
class Solution {public int[] plusOne(int[] digits) {if(digits [digits.length-1]++==9)for(int i=digits.length-1;i>0;i--){digits[i]=0;if(++digits[i-1]!=10)break;}if(digits[0]==10){int value[]=new int[digits.length+1];digits[0]=0;value[0]=1;System.arraycopy(digits,0,value,1,digits.length);return value;}return digits;}
}
原创不易,bigsai请你帮两件事帮忙一下:
点赞、在看、分享支持一下, 您的肯定是我创作的源源动力。
微信搜索「bigsai」,关注我的公众号,不仅免费送你电子书,我还会第一时间在公众号分享知识技术。加我还可拉你进力扣打卡群一起打卡LeetCode。
记得关注、咱们下次再见!
LeetCode 64最小路径和65有效数字66加一相关推荐
- leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)
题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...
- leetcode - 64. 最小路径和
64. 最小路径和 ------------------------------------------ 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总 ...
- LeetCode 64. 最小路径和(DP)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示 ...
- Leetcode 64. 最小路径和 -- DP算法
Time: 20190831 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: ...
- leetcode 64. 最小路径和
难度:中等 频次:54 题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 解题思路:动态 ...
- 93. Leetcode 64. 最小路径和 (动态规划-路径规划)
步骤一.确定状态: 1.确定原问题中变化的变量个数 2.考虑最后一步 右下角坐标设为(m-1,n-1) 那么前一步一定是在(m-2,n-1)或者(m-1,n-2) 步骤二.推断状态方程: f[i][j ...
- Leetcode 64 最小路径和 (每日一题 20210721)
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小.说明:每次只能向下或者向右移动一步.示例 1:输入:grid = [[1,3,1], ...
- LeetCode 64 最小路径和
题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和 为最小.说明:每次只能向下或者向右移动一步. 题解 动态规划 代码 class ...
- LeetCode 64.最小路径和(动态规划)
题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5 ...
最新文章
- 画布之轮播图片HTML5,Axure原型设计之轮播图
- 支付宝技术风险负责人陈亮:把事情做到极致,技术的差异性才会体现出来
- C++中利用WebService下载文件
- qsettings mysql_qt连接mysql
- iOS-数据库sqlite的使用
- Ajax — 第四天
- nacos linux启动_微服务系列之Nacos配置中心之一:Nacos介绍与安装
- 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
- spring-bean版本_如何模拟Spring bean(版本2)
- Java面试必备的集合源码详解,砥砺前行!
- 十篇论文攻克自然语言处理底层原理!推荐大家复现!
- select option 不写 value 属性 产生的浏览器差异
- 一个32岁入门的70后程序员给我的启示
- 【NumPy基础】100道numpy练习——进阶篇
- win10安装SqlServer2005教程
- 汽车故障诊断技术【4】
- 我眼中的国内IT书籍以及各大出版社
- 【Project】基于LD3320 的智能语音控制系统
- Linux内核数据结构之 radix tree
- D38 463. Island Perimeter
热门文章
- BUUCTF——[ACTF新生赛2020]SoulLike——使用angr解
- 数据结构--双向链表
- 关于报错ImportError: cannot import name ‘AbstractKeyedTuple‘ from ‘sqlalchemy.util._collections‘的解决
- [PSA]-PSA Certified简介
- optee应用程序中malloc函数的原理介绍
- mysql decs倒叙查询_mysql按照日期方式查询
- Windows环境下利用VS和mingw编译LLVM
- Ubuntu配置静态ip联网总结
- php源代码保护——PHP加密方案分析解密还原
- Mybatis动态的添加删除列