小明思考

          Just a software engineer
          posts - 124, comments - 36, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          +1

          Posted on 2013-04-15 11:22 小明 閱讀(1382) 評論(3)  編輯  收藏 所屬分類: 數據結構和算法
          問題給定一個有由數字構成的數組表示的數,求該數加1的結果。
          public class Solution {
              public int[] plusOne(int[] digits) {
              }
          }

          很簡單的問題,但是一遍寫通過,還是要求基本功比較扎實。注意進位的處理。
          Input                       Output

          [0]

          [1]

          [1]

          [2]

          [9]

          [1,0]

          [1,0]

          [1,1]

          [9,9]

          [1,0,0]

          [1,2,3]

          [1,2,4]

          [9,9,9]

          [1,0,0,0]

          [8,9,9,9]

          [9,0,0,0]

          [1,0,0,0,0]

          [1,0,0,0,1]

          [9,8,7,6,5,4,3,2,1,0]

          [9,8,7,6,5,4,3,2,1,1]


          代碼如下:

          public class Solution {
              public int[] plusOne(int[] digits) {
                  int extra = 1;
                  for(int i=digits.length-1;i>=0;--i){
                      int t = digits[i]+extra;
                      if(t>=10){
                          extra = 1;
                          digits[i] = t-10;
                      }
                      else if(extra!=0){
                          extra = 0;
                          digits[i] = t;
                          break;
                      }
                  }
                  if(extra>0){
                      int[] newDigits = new int[digits.length+1];
                      newDigits[0] = extra;
                      System.arraycopy(digits,0,newDigits,1,digits.length);
                      return newDigits;
                  }
                  return  digits;
              }
          }




          評論

          # re: +1[未登錄]  回復  更多評論   

          2013-04-15 15:42 by Harry
          in scala:
          def plusOne(list: List[Int], rem: Int): List[Int] = {
          val l = list.reverse
          l match {
          case x :: xs => x + rem match {
          case y if y >= 10 => plusOne(xs.reverse, 1) ::: (y % 10) :: Nil
          case z => plusOne(xs.reverse, 0) ::: z :: Nil
          }
          case Nil => Nil
          }
          }
          def main(args: Array[String]): Unit = {
          val l = List(1, 3, 4, 8, 9, 9)
          println(plusOne(l, 1))
          }

          # re: +1  回復  更多評論   

          2013-04-15 17:18 by 小明
          @Harry

          你這遞歸調用,效率不高吧

          # re: +1[未登錄]  回復  更多評論   

          2013-04-16 13:25 by Harry
          :)
          主站蜘蛛池模板: 化德县| 沧源| 安顺市| 焦作市| 翁牛特旗| 伊春市| 沧源| 永泰县| 临桂县| 科技| 内乡县| 左贡县| 锦州市| 尉氏县| 成都市| 仲巴县| 曲沃县| 乌兰浩特市| 府谷县| 娱乐| 高雄县| 闻喜县| 澎湖县| 广汉市| 慈溪市| 武清区| 晋宁县| 济阳县| 斗六市| 荣成市| 九台市| 上蔡县| 新巴尔虎右旗| 南安市| 大埔县| 友谊县| 醴陵市| 青海省| 东宁县| 临桂县| 双牌县|