Skip to content
Closed
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
4fcf7ff
Create beautiful-arrangement
zirea3l Oct 27, 2025
3a5a18c
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
1448767
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
fb5ecf4
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
69a579b
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
342669a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
8e9407b
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
e2c218b
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
cd38be7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
adf05c5
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
4965e59
Merge branch 'master' of https://github.com/zirea3l/Python
zirea3l Oct 27, 2025
d96f565
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
5e0a91d
Update beautiful_arrangement.py
zirea3l Oct 27, 2025
c2c10ee
Merge branch 'master' of https://github.com/zirea3l/Python
zirea3l Oct 27, 2025
88d1ecf
Create arithmetic_slices.py
zirea3l Oct 27, 2025
ca34f0a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
898b97f
Update arithmetic_slices.py
zirea3l Oct 27, 2025
cf8d7bb
Update arithmetic_slices.py
zirea3l Oct 27, 2025
61d5edd
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 27, 2025
eff3196
Delete arithmetic_slices.py
zirea3l Oct 27, 2025
dab1c52
Update arithmetic_slices.py
zirea3l Oct 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions dynamic_programming/arithmetic_slices.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
"""
An integer array is called arithmetic if it
consists of at least three elements and if
the difference between any two consecutive
elements is the same.

Given an integer array nums,
return the number of
arithmetic subarrays of nums.

A subarray is a contiguous
subsequence of the array.

"""


class ArithmeticSlices:
def numberofarithmeticslices(self, nums):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: numberofarithmeticslices. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/arithmetic_slices.py, please provide doctest for the function numberofarithmeticslices

Please provide type hint for the parameter: nums

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: numberofarithmeticslices. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/arithmetic_slices.py, please provide doctest for the function numberofarithmeticslices

Please provide type hint for the parameter: nums

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: numberofarithmeticslices. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/arithmetic_slices.py, please provide doctest for the function numberofarithmeticslices

Please provide type hint for the parameter: nums

"""
This defines a class and a function.
`nums` is input list of integers.
"""
n = len(nums)

"""
We store the length of the
array nums in variable n
"""
if n < 3:
return 0

total = 0
curr = 0

"""
An *arithmetic slice* must have **at least 3 numbers**.

So, if the array has fewer than 3 elements,
no arithmetic slices are possible — immediately return `0`.
"""

for i in range(2, n):
if nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]:
curr += 1
total += curr
else:
curr = 0

"""
We start iterating from index `2`
because we need **three elements**
(`nums[i-2], nums[i-1], nums[i]`)
to check if they form an arithmetic pattern.

<<<<<<< HEAD
So at each step,

Check failure on line 56 in dynamic_programming/arithmetic_slices.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (W291)

dynamic_programming/arithmetic_slices.py:56:25: W291 Trailing whitespace
we are looking at a triplet ending at index `i`.
=======
So at each step,
we’re looking at a triplet ending at index `i`.

Check failure on line 60 in dynamic_programming/arithmetic_slices.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (RUF001)

dynamic_programming/arithmetic_slices.py:60:11: RUF001 String contains ambiguous `’` (RIGHT SINGLE QUOTATION MARK). Did you mean ``` (GRAVE ACCENT)?
>>>>>>> ca34f0a649ef94c8b778a4babe040fcaa143a56e
"""

return total


"""
test_cases = [
# Basic cases
([1, 2, 3, 4], 3), # [1,2,3], [2,3,4], [1,2,3,4]
([1, 3, 5, 7, 9], 6), # all diffs = 2;
total slices = 6

# Edge cases
([1, 2], 0), # less than 3 elements → 0
([1, 1, 1], 1), # [1,1,1] itself is arithmetic
([1], 0), # single element
([], 0), # empty array
]
"""
64 changes: 64 additions & 0 deletions dynamic_programming/beautiful_arrangement.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
"""
Suppose you have n integers labeled 1 through n.
A permutation of those n integers
perm (1-indexed) is considered a
"beautiful arrangement" if for every i (1 <= i <= n),
either of the following is true:

-> perm[i] is divisible by i.
-> i is divisible by perm[i].
Given an integer n, return the number of the
"beautiful arrangements" that you can construct.

"""
# Solution using Backtracking


class BeautifulArrange:
# function call; n is the size of the permutation (numbers 1..n)
def countarrangement(self, n: int) -> int:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function countarrangement

Please provide descriptive name for the parameter: n

self.count = 0
"""
We initialize a counter to record how
many valid arrangements we find.
Using self.count lets the nested
function modify it without nonlocal.
"""

used = [False] * (n + 1)
"""
A boolean list to mark which numbers have
already been placed in the permutation.
"""

def backtrack(pos):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide type hint for the parameter: pos

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: backtrack. If the function does not return a value, please provide the type hint as: def function() -> None:

As there is no test file in this pull request nor any test function or class in the file dynamic_programming/beautiful_arrangement.py, please provide doctest for the function backtrack

Please provide type hint for the parameter: pos

"""
Define the recursive backtracking function.
pos is the current position in the
permutation we are filling (1-indexed).
We try to assign a number to position pos.
"""
if pos > n:
self.count += 1
# We found a complete valid arrangement, so increment the total count.
return
for num in range(
1, n + 1
): # Try every candidate number num for the current position pos.
"""
Two checks in one:
1. not used[num] — the number num has
not been placed yet (we can use it).
2. (num % pos == 0 or pos % num == 0) —
the beautiful-arrangement condition:
either num divides pos or pos divides num.
If both are true, num is a valid choice for pos.

"""
if not used[num] and (num % pos == 0 or pos % num == 0):
used[num] = True
backtrack(pos + 1)
used[num] = False

backtrack(1)
return self.count
Loading