数与位(二)
大家好!我是小笙!数与位(一)系列落下帷幕,开始新的征程数与位(二)!大家一起加油呀!!
数与位(二)系列题型如下
数与位系列二
数与位(258,171,357)
258. 各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。
由于 2 是一位数,所以返回 2。
进阶: 你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
方法一:遍历(MyCode)
我想的是通过两层while来求得该解
第一个while我是用来判断是否运算到一位数
第二个while我是用来判断num的每位数是否已经累加完
class Solution {
public int addDigits(int num) {
int sum = 0;
while(num/10 != 0){
while(num != 0){
sum += num % 10;
num = num / 10;
}
num = sum;
sum = 0;
}
return num;
}
}
执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35.3 MB, 在所有 Java 提交中击败了93.06%的用户
方法二:秒!(Other’sCode)
class Solution {
public int addDigits(int num) {
return (num - 1) % 9 + 1;
}
}
171. Excel 表列序号
给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。
例如,
A -> 1
B -> 2
C -> 3
…
Z -> 26
AA -> 27
AB -> 28
…
示例 1:
输入: columnTitle = “A” 输出: 1 示例 2:
输入: columnTitle = “AB” 输出: 28 示例 3:
输入: columnTitle = “ZY” 输出: 701 示例 4:
输入: columnTitle = “FXSHRXW” 输出: 2147483647
提示:
1 <= columnTitle.length <= 7
columnTitle 仅由大写英文组成
columnTitle 在范围 [“A”, “FXSHRXW”] 内
方法一:27进制(MyCode)
本质上就是27进制数,只不过每个数用字母替代
class Solution {
public int titleToNumber(String columnTitle) {
int n = columnTitle.length();
int sum = 0;
for(int i=0;i<=n-1;i++){
sum += (columnTitle.charAt(i)+1-'A')*Math.pow(26,n-1-i);
}
return sum;
}
}
执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.2 MB, 在所有 Java 提交中击败了83.84%的用户