LeetCode 加一

解题思路,首先判断数字的最后一个数是否为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
		}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值