[C言語][LeetCode][66]Plus One
タイトル
Plus One Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list.
タブ
Array、Math
難易度
単純
ぶんせき
テーマは整形配列を与え、1操作を加えて新しい配列を返すことを意味します.ここでは,この整形配列がすべて9の場合,1を加えると配列が1桁増えるという配列オーバーフローの問題を考慮する必要がある.
Cコード実装
上は正しく提出できますが、下の方法ではできませんが、PC(ubuntuシステム)で正しく入出力できます.
上のLeetCodeの提出ミスについて、细かい点に注意していないため、memsetのところが间违っていて、sizeof(ret)は指针の大きさだけを求めて、以下のように修正します.
Plus One Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list.
タブ
Array、Math
難易度
単純
ぶんせき
テーマは整形配列を与え、1操作を加えて新しい配列を返すことを意味します.ここでは,この整形配列がすべて9の場合,1を加えると配列が1桁増えるという配列オーバーフローの問題を考慮する必要がある.
Cコード実装
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int i = 0;
if(digits[digitsSize-1] != 9)
{
digits[digitsSize-1]++;
}
else
{
for(i=digitsSize-1; i>=0; i--)
{
if(digits[i] == 9)
{
digits[i] = 0;
}
else
{
digits[i]++;
break;
}
}
}
if(digits[0] == 0)
*returnSize = digitsSize+1;
else
{
*returnSize = digitsSize;
return digits;
}
int *array = (int *)malloc(sizeof(int)*(*returnSize));
for(i=*returnSize-1; i>=1; i--)
array[i] = digits[i-1];
array[0] = 1;
return array;
}
上は正しく提出できますが、下の方法ではできませんが、PC(ubuntuシステム)で正しく入出力できます.
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int i = 0, j=0;
int *ret;
for(i=digitsSize-1; i>=0; i--)
if(digits[i] != 9)
break;
if(i == -1)
{
ret = (int *)malloc(sizeof(int)*(digitsSize+1));
memset(ret, 0, sizeof(ret));
ret[0] = 1;
*returnSize = digitsSize+1;
return ret;
}
else
{
for(j=digitsSize-1; j>i; j--)
digits[j] = 0;
digits[i]++;
*returnSize = digitsSize;
return digits;
}
}
上のLeetCodeの提出ミスについて、细かい点に注意していないため、memsetのところが间违っていて、sizeof(ret)は指针の大きさだけを求めて、以下のように修正します.
int i = 0, j=0;
int *ret;
for(i=digitsSize-1; i>=0; i--)
if(digits[i] != 9)
break;
if(i == -1)
{
ret = (int *)malloc(sizeof(int)*(digitsSize+1));
memset(ret, 0, sizeof(int)*(digitsSize+1));
ret[0] = 1;
*returnSize = digitsSize+1;
}
else
{
for(j=digitsSize-1; j>i; j--)
digits[j] = 0;
digits[i]++;
*returnSize = digitsSize;
ret = digits;
}
return ret;