【个人笔记】英雄哥-leetcode零基础指南-第三讲-循环(python)

本人之前主要用到的都是python,但是由于懒得要死lc一道题都没做过导致笔试被乱杀,所以过来强制让自己学点东西,如有任何问题请指出,不吝赐教!

Day 2 第三讲 循环

在这里插入图片描述

了解循环

语法规则

for 语句的一般形式为:

for (循环初始化表达式; 循环条件表达式; 循环执行表达式){
	 循环体
}

运行过成为

  1. 执行 循环初始化表达式
  2. 执行循环条件表达式,若为真,则执行循环体,否则结束循环
  3. 执行完循环体后再执行循环执行表达式
  4. 重复2,3,直到循环条件表达式的值为假

在这里插入图片描述

简单应用

使用c++实现一个简单的1+2+3+…+n的循环

int sumNums(int n){           // 1
	int i;                    // 2
	int sum = 0;              // 3 
	for(i = 1; i <= n; ++i){  // 4
		sum += i;             // 5
	}                 
	return sum;               // 6
}
  1. 输入函数,输入值为n,函数名称为sumNums
  2. i作为循环变量
  3. 初始化求和值为0,sum = 0
  4. for 循环(循环初始表达式: i = 1
    循环条件表达式: i <= n
    循环执行表达式:++i )
  5. 循环体: sum += i,代表每次累加第i次的值到sum中
  6. 返回求和sum的值

初始化表达式

以下基于之前的等差数列求和代码进行改动

初始化表达式外置

将初始化表达式提到for循环外面

int i = 1;                // 在这一步直接将i初始化为1
int sum = 0;
for ( ; i <= n ; ++i) {
	  sum += i;
}

初始化表达式内置

在初始化表达式内 进行 初始化赋值,通过逗号分割

int i, sum;
for (i = 1, sum = 0; i <= n; ++i){
	sum += i;
}

条件表达式

若不告诉代码判断语句当 i <= n 的时候进行循环,则会无限的累加下去

int i = 1, sum = 0;
for (i = 1;      ; ++i){          // 这里缺失了判断语句,所以会无限循环
	sum += 1;
}

执行表达式

执行表达式 作用是让循环条件逐渐不成立,从而达到跳出循环的目的。
例如在上述代码中,我们的目标是等差数列的和,当累加到n的时候,这个总值已经是我们需要的值了,所以不需要再往下加。
但是执行表达式可以被省略,进行外置,因为本身for循环就是个循环体,在条件中循环也是循环,在外面循环也是循环(但是这两种循环方式可能会让i值不同,但是判断语句i<=n不会出错),如下所示

int i, sum = 0;
for (i = 1; i <= n;     ){       // 将执行表达式外置
	sum += i;
	++i;                         // 放在这里照样进行循环
}

题目分析

2的幂

实现一个函数,判断一个32位整形n是否为2的幂
幂:几的几次方,能被整除

bool isPowerTwo(int n){
	int i;
	unsigned int k = 1;             // 1
	if ( n < = 0 ) {
		return false;               // 2
	}
	if ( n == 1 ) {
	return true;					// 3
	}
	for ( i = 1, i < = 31; ++i ) {
		 k *= 2;					// 4
		 if ( k == n ) {
		 	 return true;			// 5
		 }
	}
	return false
}	 
  1. 定义一个无符号整型 k
  2. 如果 n <= 0, 则必然不是2的幂
  3. 必然是 2的0次幂
  4. 枚举所有的可能,直至31(2^1 ,22,…231)
  5. 如果找到了与n相同的值,返回true
  6. 否则返回false

n的第k个因子

给定两个正整数n,k
如果正整数i满足 n % i == 0,则称i是整数k的因子
考虑整数n所有因子,升序排列,并返回第k个因子
如果n的因子数量少于k,返回-1

int Factor(int n, int k){
	int i = 1
	int count = 0;             // 1
	for(; i <= n; ++i){        // 2
		if (n % i == 0) {      // 3
			++ count;
			if (count == k){
				return i;      // 4
			} 
		}
	}
	return -1;                 // 5
}
  1. 定义count计数器并初始化为0
  2. 枚举所有[1,n]范围内所有数字为因子数
  3. 一旦满足 n % i == 0, 则计数器+1
  4. 当计数器等于k时代表找到了第k个因子,直接返回
  5. 如果没找到第k个因子,代表因子数量不够,所以返回-1

有效的完全平方数

给定正整数x,如果x是完全平方数,返回true,否则false

int isSquare( int x ){
	int i;
	long long p;
	for( i = 1;     ;++i ){   // 1
		p = (long long)i * i; // 2
		if ( p == x ) {
			return true;      // 3 
		}
		if ( p > x ) {		 
			return false;	  // 4
		}
	}
	return false;             // 5
}
  1. 定义无限循环(没有循环条件表达式)
  2. 枚举所有数平方,通过 long long 避免32整型溢出
  3. 如果发现某个数的平方等于x,返回true
  4. 如果发现p值大于x,无需继续,返回false
  5. 保护该代码能够跳出

今日习题

LC 剑指offer 64

在这里插入图片描述

LC 231 2的幂

本次课程中第一个正攻解决的题目。相较于之前的示例代码,尝试了将初始化提出for循环,在最开始的时候进行初始化,个人观感程度获得了一定提升。
在这里插入图片描述

LC 325 3的幂添加链接描述

2 3 4 的幂需要注意的只是会不会溢出。本题拿python写了。
非常建议完全平方数和n的k个factor作为必做题而不是重复234幂啊。。
在这里插入图片描述

LC 342 4的幂

zenmecharumiaoshua

LC 1492 n的第k个因子

前面两次解答错误都是括号没有括起来。。麻了
在这里插入图片描述

LC 367 有效的完全平方数

在这里插入图片描述

今日份总结

  1. <= 要连这写,不能有空格
  2. {}要把一整段代码框起来
  3. 我怎么这么菜.jpg
  4. 计时 1.5h (大概)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值