首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

数组数目字加一运算

2013-11-25 
数组数字加一运算public int[] plusOne(int[] digits) {if (digits.length 1)return digitsboolean fla

数组数字加一运算
public int[] plusOne(int[] digits) {if (digits.length < 1)return digits;boolean flag = false; //判断当前是否超过9;int index = digits.length - 1;int i = digits[index] + 1;digits[index]++;if (i >= 10) {flag = true;digits[index] = digits[index] - 10;} else {return digits;}for (int j = index - 1; j > -1; j--) {int k = ++digits[j];if (k < 10) {flag = false;break;} else {digits[j] -= 10;}}if (flag) {int[] newdigits = new int[digits.length + 1];newdigits[0] = 1; //超过第一位9的话,需要前面进一位。for (int k = 0; k < digits.length; k++) {newdigits[k + 1] = digits[k];}return newdigits;}return digits;}

?

1 楼 irfen 2013-11-18   要是我的话,我可能会先把数组变成数字,然后加1,然后再把数字变成数组。。 2 楼 dugu61888 2013-11-18   irfen 写道要是我的话,我可能会先把数组变成数字,然后加1,然后再把数字变成数组。。

你说的对,我之前有过考虑,但是实现的时候不是太方便,就是将int 转换成int数组,关键是长度不好确定,如果用String转换求出长度,变成char在转成int数组,可能有点过于麻烦,至少我没有想出更好的数组-〉数字-〉数组的方法,你说呢
3 楼 kknd97 2013-11-19   楼主试试这段代码,我的思路是:
倒叙循环,如果当前位和值大于10继续循环,否则跳出循环(考虑效率),最后如果进位大于1(step变量),则直接返回新数组。

  public int[] add(int[] source) {
        int step = 1;
        for (int i = source.length - 1; i > -1; i--) {
            source[i] = source[i] + step;
            step = source[i] / 10;
            source[i] = source[i] % 10;
            if (step == 0) {
                break;
            }
        }//end for i

        if (step == 1) {
            source = new int[source.length + 1];
            source[0] = 1;
        }

        return source;
    } 4 楼 dugu61888 2013-11-19   kknd97 写道楼主试试这段代码,我的思路是:
倒叙循环,如果当前位和值大于10继续循环,否则跳出循环(考虑效率),最后如果进位大于1(step变量),则直接返回新数组。

  public int[] add(int[] source) {
        int step = 1;
        for (int i = source.length - 1; i > -1; i--) {
            source[i] = source[i] + step;
            step = source[i] / 10;
            source[i] = source[i] % 10;
            if (step == 0) {
                break;
            }
        }//end for i

        if (step == 1) {
            source = new int[source.length + 1];
            source[0] = 1;
        }

        return source;
    }
你的代码也是对的,思路不错,而且扩展性也比我的好,向你学习了! 5 楼 kknd97 2013-11-19   多谢夸奖,互相交流而已,看到了一时兴起没忍住就上手写了一段,这是面试踢吧? 6 楼 dugu61888 2013-11-19   kknd97 写道多谢夸奖,互相交流而已,看到了一时兴起没忍住就上手写了一段,这是面试踢吧?
没有错,我也是最近开始面试了,准备一些题,我差不多会2-3天更新一道题目,等到2014年换个好工作.欢迎你交流交流 7 楼 kknd97 2013-11-19   dugu61888 写道kknd97 写道多谢夸奖,互相交流而已,看到了一时兴起没忍住就上手写了一段,这是面试踢吧?
没有错,我也是最近开始面试了,准备一些题,我差不多会2-3天更新一道题目,等到2014年换个好工作.欢迎你交流交流
欢迎交流,预祝你能够找到称心的工作! 8 楼 hufangxian 2013-11-19   感觉你这代码逻辑太复杂。

下面的一看就懂
public static int[] plusOne(int[] digits) { 
if (digits.length < 1) {
  return digits;
}
   int count=0;
   int index=1;
for(int i=digits.length-1;i>=0;i--){
count+=digits[i]*index;
index*=10;
}
            count++;
            String counts=count+"";
            int length=counts.length();
            digits = new int[length];
            for(int i=length-1;i>=0;i--){
            digits[i]=count%10;
            count /=10;
            }
            return digits;
}
9 楼 dugu61888 2013-11-20   hufangxian 写道感觉你这代码逻辑太复杂。

下面的一看就懂
public static int[] plusOne(int[] digits) { 
if (digits.length < 1) {
  return digits;
}
   int count=0;
   int index=1;
for(int i=digits.length-1;i>=0;i--){
count+=digits[i]*index;
index*=10;
}
            count++;
            String counts=count+"";
            int length=counts.length();
            digits = new int[length];
            for(int i=length-1;i>=0;i--){
            digits[i]=count%10;
            count /=10;
            }
            return digits;
}


恩,你写的是比较清楚,谢谢你,主要就是为了交流.学习了 10 楼 dugu61888 2013-11-20   hufangxian 写道感觉你这代码逻辑太复杂。

下面的一看就懂
public static int[] plusOne(int[] digits) { 
if (digits.length < 1) {
  return digits;
}
   int count=0;
   int index=1;
for(int i=digits.length-1;i>=0;i--){
count+=digits[i]*index;
index*=10;
}
            count++;
            String counts=count+"";
            int length=counts.length();
            digits = new int[length];
            for(int i=length-1;i>=0;i--){
            digits[i]=count%10;
            count /=10;
            }
            return digits;
}

还有,我会经常更新的题目的,欢迎交流.

热点排行