分享

[LeetCode 258] Add Digits

 雪柳花明 2016-09-20

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 = 111 + 1 = 2. Since 2 has only one digit, return it.

Follow up:

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


有关Digital_Root,大概就是求一个数的各个位之和,若这个数为个位数,则它即原数的DigitalRoot,若不是,则再对它进行数位求和。这个在网上看到有个公式是F(N)=(N-1)%9+1;


Solution:

1. 逐位相加直到小于10

[java] view plain copy
  1. public int addDigits(int num) {  
  2.         while(num>=10){  
  3.             num = (num/10)+num%10;  
  4.         }  
  5.         return num;  
  6.     }  

2.

 
 

通过输入距离来发现规律

123456789 10 11 12 13 14 15

123456789 1 2 3 4 5 6

[java] view plain copy
  1. public int addDigits(int num) {  
  2.         return 1 + (num-1)%9;  
  3.     }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多