当前位置: 首页> 财经> 股票 > 百度手机网页版_雷电模拟器手机版下载官方网站_百度小程序入口_代写文章多少钱

百度手机网页版_雷电模拟器手机版下载官方网站_百度小程序入口_代写文章多少钱

时间:2025/7/10 2:33:21来源:https://blog.csdn.net/qq_51519091/article/details/144221727 浏览次数:0次
百度手机网页版_雷电模拟器手机版下载官方网站_百度小程序入口_代写文章多少钱

题目描述

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

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

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

示例 1:

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

示例 2:

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

示例 3:

输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

个人题解

/*** Note: The returned array must be malloced, assume caller calls free().*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>void printArray(int *arr, int size)
{for (int i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");
}int *plusOne(int *digits, int digitsSize, int *returnSize)
{int nine_counts = 0;int continuous_nine_couts_flag = 0;int current_index = 0;int new_digitsSize = digitsSize + 1;int *new_digits = (int *)malloc(new_digitsSize * sizeof(int));if (digits[digitsSize - 1] != 9){digits[digitsSize - 1] = digits[digitsSize - 1] + 1;*returnSize = digitsSize;return digits;}nine_counts = 1;continuous_nine_couts_flag = 1;for(int i = digitsSize - 1; i >= 1; i--){if (continuous_nine_couts_flag == 1){if ((digits[i] == 9) && (digits[i - 1] == 9)){digits[i] = 0;nine_counts++;continuous_nine_couts_flag = 1;}else{digits[i] = 0;current_index = i;continuous_nine_couts_flag = 0;break;}}}if (nine_counts < digitsSize){printf("nine_counts: %d\n", nine_counts);printf("current_index: %d\n", current_index);*returnSize = digitsSize;digits[digitsSize - 1 - nine_counts] = digits[digitsSize - 1 - nine_counts] + 1;return digits;}else if(nine_counts == digitsSize){digits[0] = 0;for(int i = digitsSize - 1; i >= 0; i--){new_digits[i + 1] = digits[i];}new_digits[0] = 1;*returnSize = new_digitsSize;return new_digits;}}int main()
{int digits1[] = {1, 2, 3};int digitsSize1 = 3;int returnSize1;int *result1 = plusOne(digits1, digitsSize1, &returnSize1);printf("Test Case 1: ");printArray(result1, returnSize1);assert(returnSize1 == 3 && result1[0] == 1 && result1[1] == 2 && result1[2] == 4);int digits2[] = {8, 9, 9};int digitsSize2 = 3;int returnSize2;int *result2 = plusOne(digits2, digitsSize2, &returnSize2);printf("Test Case 2: ");printArray(result2, returnSize2);assert(returnSize2 == 3 && result2[0] == 9 && result2[1] == 0 && result2[2] == 0 );int digits3[] = {9, 9, 9};int digitsSize3 = 3;int returnSize3;int *result3 = plusOne(digits3, digitsSize3, &returnSize3);printf("Test Case 3: ");printArray(result3, returnSize3);assert(returnSize3 == 4 && result3[0] == 1 && result3[1] == 0 && result3[2] == 0 && result3[3] == 0);printf("All test cases passed!\n");// Free dynamically allocated memory if any// In this case, no need to free as the return array is either the same or a new one which is not freed hereif (result2 != digits2){free(result2);}return 0;
}

官方题解:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>void printArray(int *arr, int size)
{for (int i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");
}int *plusOne(int *digits, int digitsSize, int *returnSize)
{// Start from the last digit and move leftfor (int i = digitsSize - 1; i >= 0; i--){if (digits[i] == 9){digits[i] = 0; // Set current digit to 0}else{digits[i] += 1; // Increment the current digit*returnSize = digitsSize;return digits; // Return the modified array}}// If all digits were 9, we need an extra digitint *new_digits = (int *)malloc((digitsSize + 1) * sizeof(int));new_digits[0] = 1; // Set the first digit to 1for (int i = 1; i <= digitsSize; i++){new_digits[i] = 0; // Set the rest to 0}*returnSize = digitsSize + 1;return new_digits;
}

关键字:百度手机网页版_雷电模拟器手机版下载官方网站_百度小程序入口_代写文章多少钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: