![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
文章平均质量分 92
派大星45599
山东-计科-大二 后端Java开发
展开
-
动态规划解决棋盘覆盖问题:一步步教你理解
在这个问题中,我们用f[i][j]来表示考虑到第i列时,整个棋盘的前i列形成的状态为j的覆盖方式的总数。这里的j是一个二进制数,用来表示这一列的覆盖情况,每一位代表一行,0表示该行未被覆盖,1表示该行已被覆盖。关于二进制数举个例子:第 i 列 :011000第i+2列:000010在棋盘覆盖这样的问题中,使用二进制数来表示状态是一种非常有效的方法。它可以直观地表示每一列的覆盖状态,其中每一位代表一行是否被覆盖。在你提供的例子中,我们可以将第 i 列和第 i+2 列的覆盖状态表示为二进制数。原创 2024-02-06 11:26:57 · 1056 阅读 · 0 评论 -
顺时针打印矩阵:偏移量法与边界控制法比较---剑指offer-JZ29 顺时针打印矩阵
矩阵遍历使用的x和y的定义有些特殊。通常,在数学和计算机图形学中,我们习惯于将x轴定义为水平方向,y轴定义为垂直方向。然而,在二维数组或矩阵的上下文中,这些轴的定义通常与传统的笛卡尔坐标系有所不同。在代码中x变量代表的是二维数组的行索引。y变量代表的是二维数组的列索引。然而,当我们说“向上”移动时,实际上是在减少x的值(因为在数组中向上移动意味着向更小的行索引移动)。同样,"向右"移动实际上是增加y的值(在数组中向右移动意味着向更大的列索引移动)。“向下”移动是增加x的值。“向左”移动是减少y。原创 2024-01-22 20:45:07 · 1214 阅读 · 0 评论 -
位运算实现整数加法解析与实现---剑指offer-JZ65 不用加减乘除做加法
在计算机科学和编程中,位运算是一种高效的运算方式,尤其是在资源受限的环境下。最近,我遇到了一个有趣的问题:如何仅使用位运算实现两个整数的加法?这个问题不仅仅是一个编程练习,更深入地理解了计算机如何在底层处理数据。原创 2024-01-19 03:55:28 · 769 阅读 · 0 评论 -
深入理解归并排序与逆序对计算---剑指offer-JZ51 数组中的逆序对
当我们合并两个子数组时,如果左侧数组的元素大于右侧数组的元素,那么左侧数组当前元素及其后面的所有元素都将与右侧的这个元素形成逆序对。通过这种方式,函数在合并两个子数组的同时,准确地统计了逆序对的数量。如果左侧元素大于右侧元素,那么左侧的这个元素和它右边的所有元素(因为左侧子数组是有序的)都会与右侧的这个元素形成逆序对。因为左侧数组是有序的,所以如果一个左侧元素大于右侧的元素,那么左侧这个元素及其后面的所有元素都大于这个右侧的元素。函数中的核心,它负责合并两个已排序的子数组,并在这个过程中计算逆序对的数量。原创 2024-01-18 21:05:33 · 1416 阅读 · 0 评论