• 算法进修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*表示以零个、一个或多个空字符
    • $表示结尾

    想法代码

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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.Length1,如果数组中 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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
  • 相关阅读:
    Python请问在哪儿找资源比较好呀?
    备战秋招涵盖二十九大技术栈Java面试最新八股文来袭
    一个springbatch的奇葩报错
    简单斐波那契
    MySQL高级8-触发器
    JDK8新特性--函数式接口--(Consumer的概念理解,模拟练习,企业实战)全流程彻底搞懂
    Redux中进行异步操作(网络请求)的方案
    volatile关键字
    Ansible中的任务执行控制
    GPT-4和DALL·E 3彻底懵逼,这到底是「牛」还是「鲨」
  • 原文地址:https://blog.csdn.net/Aubyn11/article/details/133946773