算法进修Day-33
- 电脑硬件
- 2025-08-16 12:12:03

算法进修Day-33 65. 有效数字
难度:困难 题目要求 有效数字(按顺序)可以分成以下几个部分:
一个 小数 或者 整数(可选)一个 'e' 或 'E' ,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:
(可选)一个符号字符('+' 或 '-')下述格式之一: 至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:
(可选)一个符号字符('+' 或 '-')至少一位数字部分有效数字列举如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。
示例1
输入:s = “0” 输出:true
示例2
输入:s = “e” 输出:false
示例3
输入:s = “.” 输出:false
题解
可以直接使用正则表达式进行匹配,^\s*-?\d+(\.\d+)?([eE][-+]?\d+)?\s*$为当前正确得正则表达式,解读如下:
^\s*表示以零个、一个或多个空格开头-?表示一个可选的负号\d+表示一个或多个的数字(\.\d+)?表示一个可选的小数部分,包括一个小数点和至少一个数字([eE][-+]?\d+)?表示科学计数法,包括"e"或"E",可选的正负号和至少一个数字\s*表示以零个、一个或多个空字符$表示结尾想法代码
using System.Text.RegularExpressions; class Solution { private static Regex compare = new Regex(@"^\s*-?\d+(\.\d+)?([eE][-+]?\d+)?\s*$"); public static void Main(String[] args) { string s = "e"; Solution solution = new Solution(); Console.WriteLine(solution.IsNumber(s)); } public bool IsNumber(string s) { return compare.IsMatch(s); } } 66. 加一难度:简单 题目要求 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1
输入:digits = [1,2,3] 输出:[1,2,4]
示例2
输入:digits = [4,3,2,1] 输出:[4,3,2,2]
示例3
输入:digits = [0] 输出:[1]
题解
定义 i n d e x = d i g i t s . L e n g t h − 1 index=digits.Length-1 index=digits.Length−1,如果数组中 i n d e x index index 位置为9,那么将 i n d e x index index 前移 如果 i n d e x = = 0 & & d i g i t s [ i n d e x ] = = 9 index==0 \&\& digits[index]==9 index==0&&digits[index]==9,那么对数组扩容, i n d e x index index 位置的内容变为1且对之后的所有元素变为0,如果 i n d e x = = 0 & & d i g i t s [ i n d e x ] ≠ 9 index==0\&\&digits[index]\neq9 index==0&&digits[index]=9 那么将 i n d e x + 1 index+1 index+1并对之后的元素变为0 如果不满足上方条件,则将最后一个元素加一
想法代码
class Solution { public static void Main(String[] args) { int[] digits = { 8,9 }; Solution solution = new Solution(); int[] res = solution.PlusOne(digits); for (int i = 0; i < res.Length; i++) { Console.Write(res[i] + " "); } } public int[] PlusOne(int[] digits) { int index = digits.Length - 1; if (digits[digits.Length - 1] == 9) { if (digits.Length > 1) { while (true) { if (index == 0) { break; } if (digits[index] == 9) { index--; } else { break; } } } if (index == 0 && digits[index] == 9) { Array.Resize(ref digits, digits.Length + 1); digits[index] = 1; } else { digits[index] += 1; } for (int i = digits.Length - 1; i > index; i--) { digits[i] = 0; } } else { digits[digits.Length - 1] += 1; } return digits; } }算法进修Day-33由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“算法进修Day-33”