首页 > 其他分享 >day5

day5

时间:2022-10-30 22:02:11浏览次数:29  
标签:count int res day5 stari ++ loop

[0059.螺旋矩阵II

class Solution {
    public int[][] generateMatrix(int n) {
        int count = 1;
        int [][] res = new int [n][n];
        int loop = n / 2;
        int stari = 0;
        int starj = 0;
        int i = 0;
        int j = 0;
        while (loop > 0){
            for (j = starj; j < n - loop; j++ ) {
                res[i][j] = count++;    
            }
            for (i = stari; i < n - loop; i++ ) {
                res[i][j] = count++;
            }
            for (; j > n - loop; j--){
                res[i][j] = count++;
            }
            for (; i < n - loop; i--){
                res[i][j] = count++;
            }
            loop--; //我这里认为while(0)不进入循环
            starj++;
            stari++;
        }
        if (n % 2 != 0){
            res[i][j] = count++;
        }
        return res;
    }
} 
  • loop没理解对,导致从左到右、从上到下都赋值没问题,但从右到左、从下到上出问题了。。本题螺旋形状赋值,不仅要关注区间上的左闭右开,还要关注行列下表i、j谁静谁动。画个图具体代值更清晰一点。
class Solution {
    public int[][] generateMatrix(int n) {
        int count = 1;
        int [][] res = new int [n][n];
        int loop = n / 2;
        int stari = 0;
        int starj = 0;
        int i = 0;
        int j = 0;
        while (loop > 0){
            for (j = starj; j < n - loop; j++ ) {
                res[i][j] = count++;    
            }
            for (i = stari; i < n - loop; i++ ) {
                res[i][j] = count++;
            }
            for (; j > loop - 1; j--){
                res[i][j] = count++;
            }
            for (; i > loop -1; i--){
                res[i][j] = count++;
            }
            loop--; //我这里认为while(0)不进入循环
            starj++;
            stari++;
        }
        if (n % 2 != 0){
            res[stari][stari] = count++;
        }
        return res;
    }
}
  • 问题多多,和随想录比较了一下,for循环处有区别,听了一下视频课,短短几分钟竟然听着听着就神游了,还差点睡着了~~不过还好,我get到了问题所在
class Solution {
    public int[][] generateMatrix(int n) {
        int count = 1;  //元素值
        int [][] res = new int [n][n];  //数组创建
        int loop = n / 2;   //圈数
        int length = 1; //跟n一起控制每边长度
        int stari = 0;  //每圈下标 i的起始位置
        int starj = 0;  //每圈下标j的起始位置
        int i = 0;
        int j = 0;
        while (loop > 0){   //每一次循环就是一圈
            j = starj;
            i = stari;
            for (; j < n - length; j++ ) {  //第一条边从左到右先闭后开进行赋值
                res[i][j] = count++;    
            }
            for (; i < n - length; i++ ) {  //第二条边从上到下先闭后开进行赋值
                res[i][j] = count++;
            }
            for (; j > starj; j--) {    //第三条边从右到左先闭后开进行赋值
                res[i][j] = count++;
            }
            for (; i > stari; i-- ){    //第四条边从下到上先闭后开进行赋值
                res[i][j] = count++;
            }
            loop--;     //一圈结束
            length++;   //边长变小
            starj++;    //初始位置移动
            stari++;
        }
        if (n % 2 != 0){    //当n不为偶数时需要给中间元素 也就是最后留下的一个元素专门赋值
            res[stari][starj] = count++;
        }
        return res;
    }
}
  • 圈数是和边长挂钩,但还是最好单独设置一个变量length把边长表示出来,而不是借助n-loop,否则n变了,loop也会随之变,那么n-loop不一定就是想要的那个数,这关系不是线性那么简单,上个代码n=3能跑通 n=4不能跑通,原因就是在这。
    明天继续:)

标签:count,int,res,day5,stari,++,loop
From: https://www.cnblogs.com/deservee/p/16842371.html

相关文章

  • Day5:Python基础:字典方法一
    1、字典增加键值Dic={'Age':18,'Name':'Jie','Sex':'male'}#增Dic['High']=160print(Dic)2、字典键值修改Dic={'Age':18,'Name':'Jie','Sex':'male'}......
  • Day5:类型转换
    由于JAVA是强类型语言,在进行某些运算的时候需要进行强类型转换低--------------------------------------------------------------------->高byte,short,char--......
  • day5.0
    标识符命名规范见名知意。驼峰命名规则。类名、接口名首字母大写方法名、变量名首字母大写常量名全部大写用_连接标识符命名规则用数字、字母、$、_构成不......
  • day53-马踏棋盘
    马踏棋盘1.算法优化的意义算法是程序的灵魂,为什么有些程序可以在海量数据计算时,依旧保持高速计算?编程中算法很多,比如八大排序算法(冒泡、选择、插入、快排、归并、希尔......
  • day51-正则表达式02
    正则表达式025.4正则表达式语法025.4.6捕获分组详见5.3.3例子packageli.regexp;importjava.util.regex.Matcher;importjava.util.regex.Pattern;//演示分......
  • 前端Vue2-Day57
    处理跨域:①cors ②JSONP③配置代理服务器配置代理:均需要在vue.config.js中进行配置方法一:直接定义代理服务器转发地址proxy,客户端请求url为代理服务器地址 de......
  • 【leetcode_C++_哈希表_day5】242. 有效的字母异位词&&349. 两个数组的交集&&202.快乐
    C++知识补充:(不完全,仅针对本题用的知识点)1.C++类&对象关键字public确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成......
  • 前端Vue2-Day56
    消息订阅与发布pubsub:实现任意组件间通信使用步骤:①安装pubsub-js:npmipubsub-js②引入:importpubsubfrom'pubsub-js'③订阅消息:使用pubsub自带的subscribe方法......
  • 前端Vue2-Day54
    ToDoList案例:组件间通信:父组件给子组件传参:父组件绑定值至子标签,子组件利用props接收。子组件给父组件传参:父组件绑定函数至子标签,子组件props接收函数,并设置methods进......
  • 前端Vue2-Day53
    修改默认配置:使用vue>output.js可以查看到Vue脚手架的默认配置。在vue.config.js中进行修改。eg:lintOnSave:false//关闭语法检查 脚手架文件结构: ref属性:被用来......