LeetCode(CPP):一月刷完热题100(2)

本文记录了LeetCode刷题过程,涉及Z字形变换、整数反转、字符串转换整数等题目,解析了思路和解题方法。其中,Z字形变换通过计算周期实现,整数反转利用数字取模和除法,字符串转换整数采用自动机DFS。
摘要由CSDN通过智能技术生成

 包含了一些非热题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){
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值