算法进修Day-33

算法进修Day-33

65. 有效数字

难度:困难

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

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

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

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

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

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

部分有效数字列举如下:["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*表示以零个、一个或多个空字符
  • $表示结尾

想法代码

Csharp 复制代码
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 \&\& digitsindex==9 index==0&&digitsindex==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\&\&digitsindex\neq9 index==0&&digitsindex=9 那么将 i n d e x + 1 index+1 index+1并对之后的元素变为0

如果不满足上方条件,则将最后一个元素加一

想法代码

Csharp 复制代码
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;
    }
}
相关推荐
叫我:松哥10 分钟前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
CoderYanger15 分钟前
A.每日一题:3612. 用特殊操作处理字符串 I
java·程序人生·leetcode·面试·职场和发展·学习方法·改行学it
黎阳之光21 分钟前
黎阳之光透明大楼:实景孪生重构智慧建筑全新范式
人工智能·物联网·算法·安全·数字孪生
承渊政道23 分钟前
【MySQL数据库学习】(MySQL表的内外连接)
数据库·学习·mysql·leetcode·bash·数据库开发·数据库系统
旖-旎1 小时前
《LeetCode 130 被围绕的区域 FloodFill DFS 解法》
c++·算法·深度优先·力扣·floodfill
林森lsjs1 小时前
斐波那契数列的 N 种解法:从递归到动态规划的优化之路【算法思考】
算法·动态规划
apcipot_rain2 小时前
计科八股20260616(1)——堆存中位数、链表判环、黑白测试、敏捷开发与瀑布模型、配置管理、持续集成、池化
数据结构·算法·软件工程
JAVA面经实录9179 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
开源Z11 小时前
LeetCode 42 · 接雨水:从暴力到双指针的三步优化
算法·leetcode
旖-旎11 小时前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill