解题思路,首先判断数字的最后一个数是否为9,依次遍历,并且用一个carry标记是否进位,0表示不进位1表示进位,用number表示当前遍历的下标,如果是为9就直接将该下标赋值为0,并且将carry赋值为1,继续遍历下一位,直到当前数字不为9就直接将标记carry置为0,并且break结束for循环。
在for循环结束之后再判断carry是否为1,如果是1并且number下标为0,就说明格式类似:999。那么就直接将数组存入一个新的并且长度大1的数组,第一位置为1,其余位数全部为0。如果carry是0,则直接将遍历最后的那个下标number的值取出来加一。
var carry = 0 // 进位标记
var accessIndex = mArray.size - 1 // 访问的下标
// 如果最后一位数是9
for (i in mArray) {
if (mArray[accessIndex] == 9) {
carry = 1
mArray[accessIndex] = 0
if (accessIndex > 0) {
accessIndex--;
}else{
break
}
} else {
carry = 0
break
}
}
if (carry == 1 && accessIndex == 0) {
// 遍历完了还是有进位的标记,就是数组中的所有元素都是9,类似9999,就需要创建新的数组存放,首位为1
var newIntArray: IntArray = IntArray(mArray.size+1)
for (i in 0..(mArray.size)) {
if (i == 0) {
newIntArray[i] = 1
} else {
print(i)
newIntArray[i] = 0
}
}
return newIntArray
} else {
mArray[accessIndex] += 1
return mArray
}