1.Excel Sheet Column Number
大意:A->1,B->2,...,AA->27,...
解体思路:考虑每位的权值,然后加起来
代码:
class Solution {
public:
int titleToNumber(string s) {
int n = s.size();
int weidge = 1;
int num = 0;
for (int i = n - 1; i >= 0; i--)
{
if (s[i] > 'Z' && s[i] < 'A') return 0;
num += (s[i] - 'A' + 1) * weidge;
weidge *= 26;
}
return num;
}
};
2.Plus One
大意是数组表示的数,计算加1的结果
思路:考虑好进位,以及第一位的进位
代码:
class Solution {
public:
vector<int> plusOne(vector<int> &digits) {
int carry = 1;
int n = digits.size();
for(int i = n-1;i >= 0;i--)
{
if(digits[i] + carry > 9)
{
digits[i] = (digits[i] + carry)%10;
carry = 1;
continue;
}
digits[i] = digits[i] + carry;
carry = 0;
}
if(carry == 1)
{
digits.insert(digits.begin(),1);
}
return digits;
}
};
3.Reverse Integer
大意是把整数除符号位都反转过来
思路:略
代码:
class Solution {
public:
int reverse(int x) {
int out = 0;
while(x){
out = out*10+x%10;
x = x/10;
}
return out;
}
};
大意是计算n的阶乘尾部有多少0
思路:一个5的倍数对应一个尾部的0,一个25的倍数尾部再加一个0,125的倍数再加一个0。。。所以代码也很简单。要注意溢出,第一次就挂在溢出了
代码;
class Solution {
public:
int trailingZeroes(int n) {
//n阶乘尾部有多少个零;
int zeros = 0;
long i = 5; //int在遇到大数时会溢出
while (i <= n)
{
zeros += n / i;
i = i * 5;
}
return zeros;
}
};
5.Excel Sheet Column Title
和第一个相反,1->A,2->B,...27->AA,...
思路:其实就是一个进制转换,26进制,1-26
代码:
class Solution {
public:
string convertToTitle(int n) {
int tmp = n;
string s = "";
while(tmp != 0)
{
s += (char)((tmp-1)%26+'A');
tmp = (tmp-1)/26;
}
reverse(s.begin(),s.end());
return s;
}
};