題目內容
如果一個整數能夠被其各個數位上的數字之和整除,則稱之為 哈沙德數(Harshad number)。給你一個整數 x 。如果 x 是 哈沙德數 ,則返回 x 各個數位上的數字之和,否則,返回 -1 。
示例 1:
輸入: x = 18
輸出: 9
解釋:
x 各個數位上的數字之和為 9 。18 能被 9 整除。因此 18 是哈沙德數,答案是 9 。
示例 2:
輸入: x = 23
輸出: -1
解釋:
x 各個數位上的數字之和為 5 。23 不能被 5 整除。因此 23 不是哈沙德數,答案是 -1 。
提示:
1 <= x <= 100
思路1
通過循環求出來各個數位上的數字之和,判斷該數能否被數位和整除即可
時間復雜度 O ( l o g x ) O(logx) O(logx) 空間復雜度 O ( 1 ) O(1) O(1)
代碼1
func sumOfTheDigitsOfHarshadNumber(x int) int {sum,tmpx := 0,xfor tmpx > 0 {sum = sum + tmpx % 10 tmpx = tmpx / 10}if x % sum == 0 {return sum}return -1
}
class Solution {
public:int sumOfTheDigitsOfHarshadNumber(int x) {int sum = 0,tmpx = x;while( tmpx > 0 ) {sum += tmpx % 10;tmpx /= 10;}if (x % sum == 0) {return sum;}return -1;}
};
思路2
注意x的范圍其實只有100,對于1到99來說,數位和其實相當于x%10+x/10,直接計算即可。
再特判下x=100的情況
時間復雜度 O ( 1 ) O(1) O(1) 空間復雜度 O ( 1 ) O(1) O(1)
代碼2
func sumOfTheDigitsOfHarshadNumber(x int) int {if x == 100 {return 1}if x % ( x % 10 + x / 10 ) == 0 {return x % 10 + x / 10}return -1
}
class Solution {
public:int sumOfTheDigitsOfHarshadNumber(int x) {if (x == 100) {return 1;}int tmp = x % 10 + x / 10 ;if (x % tmp == 0) {return tmp;}return -1;}
};