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.
拿到题目首先想到的就是利用循环解决问题。js中见过类似问题,先用JavaScript来解决。
解法一:
/** * @param {number} num * @return {number} */ var addDigits = function(num) { var digitsString = num + ""; var str = digitsString.split(""); while(str.length != 1){ var a = 0; for(var i = 0; i < str.length; i++){ a += parseInt(str[i]); } str = a.toString().split(""); } return parseInt(str[0]); };利用类似的思想,用Java代码实现:
public class Solution { public int addDigits(int num) { String digitsString = num + ""; String str[] = digitsString.split(""); while(str.length != 1){ int a = 0; for(int i = 0; i < str.length; i++){ a += Integer.parseInt(str[i]); } digitsString = a + ""; str = digitsString.split(""); } return Integer.parseInt(str[0]); } }
总结
1.总结Java中的parseInt方法属于Integer对象,可以有一个或两个参数,返回一个基本数据类型int。类似的方法还有Double.parseDouble()等。
2.split()函数用于按字符来切割字符串,并返回一个数组。以下转自JavaScript split() 方法-w3school
stringObject.split(separator,howmany)参数描述
也使用正则表达式作为 separator:
解法二:
转换为字符串的操作略显复杂,可以直接对数据操作:
public class Solution { public int addDigits(int num) { /* 解法一 */ // String digitsString = num + ""; // String str[] = digitsString.split(""); // while(str.length != 1){ // int a = 0; // for(int i = 0; i < str.length; i++){ // a += Integer.parseInt(str[i]); // } // digitsString = a + ""; // str = digitsString.split(""); // } // return Integer.parseInt(str[0]); /* 解法二 */ while(num >= 10){ num = (num / 10) + (num % 10); } return num; } }这种解法简单易懂,不做赘述。
解法三:
此题还有一个follow up:
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
并给出了一些提示:可以参考Digital root-Wikipedia
任何数字的题目都是有规律可循的,
public class Solution { public int addDigits(int num) { /* 解法一 */ // String digitsString = num + ""; // String str[] = digitsString.split(""); // while(str.length != 1){ // int a = 0; // for(int i = 0; i < str.length; i++){ // a += Integer.parseInt(str[i]); // } // digitsString = a + ""; // str = digitsString.split(""); // } // return Integer.parseInt(str[0]); /* 解法二 */ // while(num >= 10){ // num = (num / 10) + (num % 10); // } // return num; /* 解法三 */ return 1 + (num-1)%9; } }