leetcode-66-加一(PLUS one)-java

题目及测试

package pid66;
/*加一

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

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

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

示例 1:

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

示例 2:

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


}*/
public class main {
	
	public static void main(String[] args) {
		int[][] testTable = {{1,2,3},{4,3,2,1},{1,2,3,9},{1,1,9,9},{9,9}};
		for (int[] ito : testTable) {
			test(ito);
		}
	}
		 
	private static void test(int[] ito) {
		Solution solution = new Solution();
		int[] rtn;
		long begin = System.currentTimeMillis();
		for (int i = 0; i < ito.length; i++) {
		    System.out.print(ito[i]+" ");
		}//开始时打印数组
		rtn = solution.plusOne(ito);//执行程序
		long end = System.currentTimeMillis();		
		System.out.println("rtn=" );
		for (int i = 0; i < rtn.length; i++) {
		    System.out.print(rtn[i]+" ");
		}//打印结果几数组
		System.out.println();
		System.out.println("耗时:" + (end - begin) + "ms");
		System.out.println("-------------------");
	}

}

解法1(成功,1ms,很快)
index首先为length-1
对result[index]进行判断,如果为9,则变为0,index–,继续下一次循环
不为9,则+1,退出循环
最后如果进行到最后的循环,并且第一个数为0,则证明原数为999型
新建一个1000型的数组(新建后,设置1,之后不用设置0,因为创建是就为0)并返回。

package pid66;

public class Solution {
	public int[] plusOne(int[] digits) {
		int length=digits.length;
		int index=length-1;
		//result是最后返回的数组
		int[] result=digits;
		while(index>=0){
			if(result[index]!=9){
				//如果这个数不为9,直接+1,跳出循环
				result[index]++;
				break;
			}
			else{
				//为9,变为0,index--,进入下一个循环
				result[index]=0;
				index--;
			}
		}
        if(index==-1){
        	//如果一直变0,直到第一个数,会导致index=-1,result变成1000的形式
        	result=new int[length+1];
        	result[0]=1;
        	//其余位默认是0
        }
		return result;
    }

}

注意:判断+1进位可以用mod10,创造新数组用copyarray

你可能感兴趣的:(数据结构-数组,leetcode-初级,leetcode)