包含了一些非热题100的题目
6.Z字形变换(mid)
思路:
根据题意,当我们在矩阵上填写字符时,会向下填写 r 个字符(行数),然后向右上继续填写 r-2 个字符,最后回到第一行,因此 Z 字形变换的周期 t=r+r-2=2r-2,每个周期会占用矩阵上的 1+r-2=r-1 列。来源:力扣(LeetCode)
在每个周期上,“Z”型变换认为“7”型为一周期,这样每一个周期中第一行和最后一行只有一个元素,其他行都有第一列和“/”型对角线上两个元素,所以枚举时,对每行的周期所包含的元素进行插入ans:所有行都插入第一个元素,非第一行和最后一行在条件(本位值未越界&&本位值加周期未越界)下则可以插入第二个元素。
逐行插入,可以直接返回ans。
class Solution {
public:
string convert(string s, int numRows) {
int n=s.length(),r=numRows;
if(r==1||r>=n){return s;}
string ans;//创建一个数组用于存储新的字符串数据
int T=2*r-2;//周期T中元素个数,就是一个"Z"包含的列数
for(int i=0;i<r;++i){//枚举矩阵的行
for(int j=0;j+i<n;j+=T){//枚举每个周期
ans+=s[j+i];//周期内第一个元素
if(i>0&&i<r-1&&j+T-i<n)//第一行和最后一行每个周期内只有一个字符,所以i>0&&i<r-1,周期内第二个元素的位置要小于n,所以j+T-i<n
{
ans+=s[j+T-i];//周期内第二个元素
}
}
}
return ans;
}
};
7. 整数反转(mid)
思路:
翻转首先想到了stack,但是负数还要讨论,另外比较占空间;
x%10,可以得到x的最高位数字,下一操作将x/10,删除原数字x的最高位,为提取次高位做铺垫;
提取到高位数字后,把它们依次放到地位,循环执行(原先 i 位)*10+(原先 i-1 位);
代码很清楚。
class Solution{
public:
int reverse(int x){
int rev=0;
while(x!=0)
{
if(rev<INT_MIN/10||rev>INT_M