数组题目:加一

2024-02-06 07:18
文章标签 数组 题目 加一

本文主要是介绍数组题目:加一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:加一

出处:66. 加一

难度

3 级

题目描述

要求

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 \texttt{0} 0 之外,这个整数不会以零开头。

示例

示例 1:

输入: digits = [1,2,3] \texttt{digits = [1,2,3]} digits = [1,2,3]
输出: [1,2,4] \texttt{[1,2,4]} [1,2,4]
解释:输入数组表示数字 123 \texttt{123} 123

示例 2:

输入: digits = [4,3,2,1] \texttt{digits = [4,3,2,1]} digits = [4,3,2,1]
输出: [4,3,2,2] \texttt{[4,3,2,2]} [4,3,2,2]
解释:输入数组表示数字 4321 \texttt{4321} 4321

示例 3:

输入: digits = [0] \texttt{digits = [0]} digits = [0]
输出: [1] \texttt{[1]} [1]

数据范围

  • 1 ≤ digits.length ≤ 100 \texttt{1} \le \texttt{digits.length} \le \texttt{100} 1digits.length100
  • 0 ≤ digits[i] ≤ 9 \texttt{0} \le \texttt{digits[i]} \le \texttt{9} 0digits[i]9

解法

思路和算法

将一个非负整数加一,得到的新数的长度可能和原数的长度相同,也可能比原数的长度多 1 1 1 位。只有当原数的每一位都是 9 9 9 时,新数的长度才会比原数的长度多 1 1 1 位。

模拟加法过程即可。首先将数组 digits \textit{digits} digits 的右边第一位加 1 1 1,如果在更新之后,第一位大于 9 9 9,则产生进位,将第二位加 1 1 1,第一位保留个位。如果在进位操作之后,第二位大于 9 9 9,则继续处理进位,直到处理到最高位,或者进位不再产生大于 9 9 9 的位。

如果最高位大于 9 9 9,则新数的长度比元素的长度多 1 1 1 位,新数只有最高位是 1 1 1,其余每一位都是 0 0 0,因此创建新数组,将新数组的最高位设为 1 1 1 并返回。

如果最高位不大于 9 9 9,则返回更新后的数组 digits \textit{digits} digits

代码

class Solution {public int[] plusOne(int[] digits) {int length = digits.length;int index = length - 1;digits[index]++;while (index > 0 && digits[index] > 9) {digits[index - 1] += digits[index] / 10;digits[index] %= 10;index--;}if (digits[0] > 9) {digits = new int[length + 1];digits[0] = 1;}return digits;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 digits \textit{digits} digits 的长度。需要反向遍历数组 digits \textit{digits} digits 一次,更新数组中的元素或者创建新数组。

  • 空间复杂度: O ( 1 ) O(1) O(1)。除了返回值以外,使用的空间复杂度是常数。

这篇关于数组题目:加一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683535

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

PHP7扩展开发之数组处理

前言 这次,我们将演示如何在PHP扩展中如何对数组进行处理。要实现的PHP代码如下: <?phpfunction array_concat ($arr, $prefix) {foreach($arr as $key => $val) {if (isset($prefix[$key]) && is_string($val) && is_string($prefix[$key])) {$arr[