首页 > 解决方案 > 为什么是'break;' 嵌套循环中的 if 语句没有按预期工作?

问题描述

我正在尝试LeetCode 上的二和问题。这是我的代码 -

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> output{};
        for(int i = 0; i < nums.size(); i++){
            for(int j = 0; j < nums.size(); j++){
                if (nums[i] + nums[j] == target && i - j != 0){
                    output.push_back(i);
                    output.push_back(j);
                    break;
                }
            }
        }
        return output;
    }
};

对于输入 -

[3,2,4]
6

输出是 -

[1,2,2,1]

虽然它实际上应该是 -

[1,2]

这意味着当 if 语句为真时,嵌套 for 循环中 if 下的 break 语句会导致循环中断。但这不是在这里发生的。

仅当我将嵌套 for 循环的初始化从 -

int j = 0;

int j = i + 1;

它的工作原理。我明白为什么当 j 改变时它会起作用。但是,为什么 j = 0 代码不起作用超出了我的理解。为什么break语句不起作用?

PS 这是break使用类似逻辑和相同输入的 Python 代码 -

class Solution(object):
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            for j in range(len(nums)):
                if nums[i] + nums[j] == target and i - j != 0:
                    return [i, j]
                    break
                else:
                    continue

标签: c++for-loopif-statementclangc++17

解决方案


这是因为 break 只中断了内部 for 循环,而不是外部 for 循环。


推荐阅读