天天看點

leetcode258-各位相加各位相加

文章目錄

  • 各位相加
    • 題目描述
    • code
      • 方法一
      • 方式二
      • 方式三

各位相加

題目描述

code

方法一

逾時
//一個整數 num, 反複将各個為相加,知道結果為一位數
    //超出時間限制 --進行優化,使用更搞笑方式處理--目前使用兩層for循環進行處理,這樣效率比較低
    class Solution1 {
        public int addDigits(int num) {
            //進行處理
            while (!isOne(num)) {
                //擷取每一位數
                String s = num + "";
                int tmp = 0;
                for (int i = 0; i < s.length(); i++) {
                    int t = s.charAt(i) - '0';
                    //進行相加
                    tmp += t;
                }
                num = tmp; //進行指派
            }
            return num;
        }

        //判斷是否是一位數
        private boolean isOne(int num) {
            return num > 0 && num <= 9;
        }
    }
           

方式二

保留求解,不逾時
class Solution {
        //進行位相加
        public int addDigits(int num) {
            int sum = 0;
            while (num >= 10) { //不是個位數
                sum = 0;
                //不進行轉換成字元串
                while (num!=0) {
                    int temp = num % 10; //求個位數
                    sum += temp; //加起來
                    num /= 10; // 然後再除以10
                }
                num = sum; //然後進行指派
            }
            return num;
        }
    }
           

方式三

網上看到
class Solution {
    public int addDigits(int num) {
        return (num - 1) % 9 + 1;
    }
}