zoukankan      html  css  js  c++  java
  • leetcode 258. 各位相加

    给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

    示例:

    输入: 38
    输出: 2 
    解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
    

    进阶:
    你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?

    思路:获得num的每一位数,对其逐个求和; 重复这一过程知道和小于10

     1 class Solution {
     2 public:
     3     vector<int> getnum(int num){
     4         vector<int> ans;
     5         while(num){
     6             ans.push_back(num%10);
     7             num/=10;
     8         }
     9         return ans;
    10     }
    11     int addDigits(int num) {
    12         while(num>=10){
    13             vector<int> temp = getnum(num);
    14             int sum = 0;
    15             for(int i=0; i<temp.size(); i++) sum += temp[i];
    16             num = sum;
    17         }
    18         return num;
    19     }
    20 };

    不再单独的去获取num的每一位,直接把每一位相加

    class Solution {
    public:
        int addDigits(int num) {
            int sum = 0;
            while(true){
                sum += (num%10);
                num /= 10;
                if(num==0) {
                    num = sum;
                    sum = 0;
                    if(num<10) return num;
                }
            }
        }
    };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    POJ 基本算法(3)
    给定范围的素数筛选(POJ 2689)
    无向图、有向图的最小环
    第k短路和A*
    HDU 4302 Holedox Eating (set + iterator)
    笛卡尔树
    HDU 多校联合第一场
    HDU 多校联合第二场
    POJ 图算法(3)
    POJ 1038 Bugs Integrated, Inc. (状态dp)
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9031085.html
Copyright © 2011-2022 走看看