首页 > 其他分享 >【JS】6. Z 字形变换

【JS】6. Z 字形变换

时间:2022-09-05 20:24:12浏览次数:96  
标签:const 字形 变换 复杂度 JS numRows ar 字符串 周期

6. Z 字形变换

二维数组模拟

就是找出放单词位置的规律出来

var convert = function(s, numRows) {
    //如果要求的行数都超过了字符串的长度或者本身行数要求就为1
    const n=s.length,r=numRows;
    if(r === 1 || r>=n){
        return s;
    }
    //设每隔一定的周期字符串都会排成对应的 ‘V’ 字符
    //可以发现当向下排R个时,到新的第一行的中间有R-2个字母
    //因此可以让行变为  r+ r -2= 2*r-2
    const ar=r*2-2;
    //可以让每个周期 T 的列变为 1 + r-2
    //那么行是固定的,列一共为 (r-1) * T 
    //根据观察T 为 [s.length-1]/(2*r-2) + 1
    //因为认为最后一个周期为完整周期 像个'l'也不是没可能
    const c=Math.floor((n+ ar -1)/ar)*(r-1);
    //构建一个仅为值引用的二维数组
    const mat=new Array(r).fill(0).map(()=>new Array(c).fill(0));
    let x=0,y=0;
    //先遍历字符串
    for(let i=0;i<n;i++){
        mat[x][y]=s[i];
        // 如果满足 i mod ar < r-1的条件,则就要向下画
        if(i% ar <r-1){
            ++x;
        //而不满足的话,就是要向右上开始画了。
        }else{
            --x;
            ++y;
        }
    }
    //之后就要按照题目规则重新弄成新的字符串
    const res=[];
    //获取每行的单词组
    for(const row of mat){
        //再根据每列获取单个单词
        for (const ch of row){
            if(ch !==0){
                res.push(ch);
            }
        }
    }
    return res.join('');
};

复杂度分析

时间复杂度:\(O(r\cdot n)\),其中 \(r=\textit{numRows}\),\(n\) 为字符串 \(s\) 的长度。

空间复杂度:\(O(r\cdot n)\)。

标签:const,字形,变换,复杂度,JS,numRows,ar,字符串,周期
From: https://www.cnblogs.com/PaturNax/p/16659427.html

相关文章

  • three.js基础用法
    import*asTHREEfrom'../libs/build/three.module.js';import{OrbitControls}from'../libs/jsm/controls/OrbitControls.js'import{CSS2DRenderer,CSS2DObje......
  • js-Promise的all、allSettled、any、race 方法简介
    1、all所有的Promise对象均成功后才会执行all中的then回调,否则返回的是最先rejected状态的值。constpromise1=newPromise((resolve,reject)=>{setTimeout((......
  • 前端js vue的语音播报
    目前h5新增一个文字转语音的功能(但是正在完善中,勉强能用),h5新增的SpeechSynthesisUtterance实例首先new一个SpeechSynthesisUtterance对象使用实例对象的一些属性,包括......
  • js实现切换页面清除定时器的函数
    背景:我在切换页面的时候,发现切换回原来的页面,定时器会叠加而不会清除原来的定时器解决方法:1.定义全局变量,通过js遍历清除(不会用,但性能好)varpageTimer={};/......
  • js 日期格式化
    js日期格式化小技巧1.接收参数:-需要格式化的日期string;-format格式信息2.转换传入的日期格式并设置格式化formatconfig并赋值;3.分解format格式化所需......
  • # JS输入输出语句
    JS输入输出语句方法说明归属alert(msg)浏览器弹出警示框浏览器console.log(msg)浏览器控制台打印输出信息浏览器prompt(info)浏览器弹出输出框,用户......
  • # JS有三种书写位置
    JS有三种书写位置:行内、内嵌、外部1.行内式JS<inputtype="button"value="点我试试"onclick="alert('HelloWorld')"/>可以将单行或少量JS代码写在HTML标签的事......
  • jsp页面ie跳转谷歌
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>首页</title></head><body><div><ahref="" onclick='test()......
  • 浏览器输入URL发生了什么:DNS解析、TCP握手、HTTP缓存、重定向、服务器状态码、渲染引
    输入地址,浏览器查找域名的IP地址。浏览器向该IP地址的web服务器发送一个HTTP请求,在发送请求之前浏览器和服务器建立TCP的三次握手,判断是否是HTTP缓存,如果是强制......
  • JS实现异步的方法:回调函数callback、事件监听、setTimeout、Promise、生成器Generato
    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。回调函数是异步操作最基本的方法,比如AJAX回调,回调函数的优点是简单、容易理解和实现,缺点是不利于代码......