算法面试题之:一个3*4表格从A到B一共有多少总走法

博客围绕3*4表格从A点到B点的走法问题展开,只能向右和向下走。解题关键在于找规律和运用递归原理,得出若x等于0或y等于0路线只有一条,(x,y)点路线由(x - 1,y)与(x,y - 1)点路线相加得到等规律,并用Java和PHP代码求解,结果为35条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:一个3*4表格只能向右和向下走,不可以折线和回退,从A点到B点一共有多少总走法

解题关键:1是规律2是递归

第一步找规律

先设置坐标x,y.查出比较简单范围的点条数

根据上图我们得到三个规律

1、如果x等于0那么路线只有一条。

2、如果y等于0那么路线只有一条。

3、(x,y)点数据可以用(x-1,y)点的路线+(x,y-1)点的路线得到。

4、(0,0)点的路线为0。

用java根据这个规律写一个方法:

我要求x,y那么我就必须先把(x-1,y)点的路线+(x,y-1)点的路线得到,而(x-1,y) 需要用((x-1)-1,y)+((x-1),y-1)以此类推,需要重复调用上述方法。那么就是递归原理了

@RunWith(SpringRunner.class)
@SpringBootTest(classes =AdsMarketingFemApplication.class)
public class ATest  {
    public  Integer count(Integer x,Integer y){
        Integer count;
        if (x == 0 && y==0){
            return 0;
        }
        if (x == 0 || y==0){
            return 1;
        }

        return   count(x,y-1)+count(x-1,y);
    }

    @Test
    public void testCount() {
        Integer count=count(2,2);
        System.out.println(count);
    }

}

结果:35条

此处也贴出php的代码

function go($x, $y) {

    if ($x == 0 && $y == 0)   {
        return 0;    
    } elseif ($x==0 || $y==0) {
        return 1;
    }
            
    return  go($x, $y - 1) + go($x - 1, $y);  
    
}
echo go(3,4);

结果相同为35条

<think>嗯,用户想了解用C++刷LeetCode时的效率问题,特别是每天适合刷多少题。这个问题其实挺常见的,但确实需要因人而异来回答。 用户可能是个刚开始刷题的新手,或者是个想调整学习计划的中级学习者。从引用内容看,用户似乎看过些刷题经验分享,比如那篇300AC的博客[^1]和移除重复项的C++代码[^2]。用户应该更关注实际可操作的建议,而不是泛泛而谈。 我注意到引用[3]提到算法训练营的教学方式,用动画讲解加多语言实现,这说明可视化教学对理解很有帮助。不过用户特别问的是C++,所以重点要放在C++的实现特点上。 关于每天刷题量,绝对不能给个固定字。要考虑到: - 新手和老手能力差异很大 - 题目难度波动明显(简单题和难题耗时可能差10倍) - 是否在消化吸收(复盘时间可能比写代码还长) 从引用[1]的作者经验看,他300题后就开始混合刷题了,说明量变会引起质变。初期可以少而精,后期再增加量。 特别要提醒用户警惕"无效刷题"的陷阱。看到引用[2]那个简洁的双指针解法,就说明吃透经典题解比刷量重要。有时候花3小时彻底理解一个难题,比水过5道简单题有价值得多。 用户可能没意识到的是,刷题节奏应该跟随学习阶段动态调整。比如: - 专题突破期(如专注二分查找时)可以每天2-3题 - 综合复习期可能每天1题但搭配系统回顾 - 面试冲刺期则需要模拟考试强度 最后决定用表格展示不同阶段的建议量,这样最直观。还要强调下C++的特别注意事项,比如手动内存管理带来的调试时间消耗,这在其他语言里是不存在的负担。</think>关于C++刷LeetCode的每日题量规划,需结合学习阶段、题目难度和时间分配综合考量。以下是科学建议: ### 、分阶段题量建议 | **学习阶段** | **推荐题量/日** | **核心目标** | **典型题型** | |----------------|-----------------|-----------------------------|---------------------------| | **新手入门** | 1-2题 | 掌握语法与基础据结构 | 组操作、线性查找 | | **专题突破** | 2-3题 | 攻克算法模板(如二分/DFS) | 二叉树遍历、二分查找 | | **综合提升** | 3-4题 | 熟练组合解法 & 优化时间复杂度 | 动态规划、图论综合题 | | **面试冲刺** | 4-5题 | 模拟笔试场景 & bug-free实现 | 高频Hard题、系统设计 | > 注:参考进阶路径[^3],建议初期按专题集中训练(如连续3天专攻二分查找) ### 二、关键效率原则 1. **质量 > ** - 吃透1道经典题胜于草率完成5题(如彻底理解[双指针去重](https://leetcode.com/problems/remove-duplicates-from-sorted-array/)的边界处理[^2]) - 每题完成后需: ```mermaid graph LR A[AC代码] --> B[复杂度优化] B --> C[对比题解] C --> D[重写精简版] ``` 2. **时间分配公式** $$有效时间 = 编码时间 \times 2 + 结时间$$ 例如:30分钟解题 → 60分钟分析优质解 + 30分钟整理笔记 3. **C++专项建议** - 善用STL特性:`lower_bound()`等内置算法减少造轮子 - 内存管理训练:刻意练习指针操作(链表/树问题) - 编译调试:利用`-fsanitize=address`检测内存错误 ### 三、疲劳预警信号 当出现以下情况时应减量: - 相同bug连续出现3次 - 简单题耗时 > 40分钟 - 忘记已AC题的思路(说明未形成肌肉记忆) > 参考经验:某位300AC的开发者提到,后期混合刷题比单专题更有效率[^1] ### 四、配套训练策略 1. **五刷法** | 轮次 | 目标 | 时间间隔 | |------|--------------------------|----------| | 刷 | 独立解出 | - | | 二刷 | 优化代码行 | 1天后 | | 三刷 | 尝试不同解法(如迭代改递归) | 3天后 | | 四刷 | 白板手写 | 1周后 | | 五刷 | 口述解题思路 | 1月后 | 2. **错题本模板** ```markdown ## [26. 删除有序组中的重复项] **关键点**:快慢指针的移动条件 **踩坑**:slow指针未预递增导致首元素丢失 **C++优化**: ```cpp nums[++slow] = nums[fast]; // 前置++确保覆盖正确位置 ``` ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值