小明思考

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

          +1

          Posted on 2013-04-15 11:22 小明 閱讀(1381) 評論(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
          :)
          主站蜘蛛池模板: 黄骅市| 桐梓县| 长白| 长泰县| 湘阴县| 石狮市| 鄂托克前旗| 固镇县| 宝兴县| 平陆县| 犍为县| 策勒县| 嵊州市| 江津市| 安塞县| 平乡县| 北川| 正安县| 新郑市| 会昌县| 泗洪县| 德令哈市| 昔阳县| 拉萨市| 张家界市| 鲁山县| 讷河市| 湾仔区| 定安县| 顺昌县| 德格县| 伊金霍洛旗| 武隆县| 山丹县| 齐河县| 比如县| 朝阳区| 寻乌县| 太湖县| 惠东县| 沙坪坝区|