leetcode 258. Add Digits

雨点打透心脏的1/2处 2022-06-08 13:24 269阅读 0赞

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

题意很简单,最简单的做法就是使用字符串,但是题意说可以使用公式之类的,我是参考网上的做法。

代码如下:

  1. /*
  2. * 这个使用Java的字符串技巧最方便
  3. * */
  4. public class Solution
  5. {
  6. /*
  7. * 循环做法,使用字符串最方便
  8. * */
  9. public int addDigitsByLoop(int num)
  10. {
  11. String numStr=num+"";
  12. while(numStr.length()>1)
  13. {
  14. int sum=0;
  15. for(int i=0;i<numStr.length();i++)
  16. sum+=Integer.parseInt(""+numStr.charAt(i));
  17. numStr=sum+"";
  18. }
  19. return Integer.parseInt(numStr);
  20. }
  21. int floor(int x)
  22. {
  23. return (x - 1) / 9;
  24. }
  25. /*
  26. * 这个是利用公式直接计算,很棒,但是想不到
  27. * */
  28. int addDigits(int num)
  29. {
  30. return num - 9 * floor(num);
  31. }
  32. }

下面是C++的做法,就是写一个两层循环,直接计算即可,代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5. class Solution
  6. {
  7. public:
  8. int addDigits(int num)
  9. {
  10. if (num <= 9)
  11. return num;
  12. while (num >= 10)
  13. {
  14. int sum = 0;
  15. while (num > 0)
  16. {
  17. sum += num % 10;
  18. num /= 10;
  19. }
  20. num = sum;
  21. }
  22. return num;
  23. }
  24. };

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读